All Products
Search
Document Center

MaxCompute:Ikhtisar Fungsi Agregat

Last Updated:Aug 22, 2026

Fungsi agregat menggabungkan beberapa catatan input menjadi satu nilai output. Anda dapat menggunakan fungsi agregat dengan klausa group by dalam MaxCompute SQL. Topik ini menjelaskan format perintah, parameter, dan contoh fungsi agregat yang didukung oleh MaxCompute SQL serta memandu Anda dalam pengembangan data menggunakan fungsi-fungsi tersebut.

Tabel berikut menjelaskan fungsi agregat yang didukung oleh MaxCompute SQL.

Function

Features

ANY

Memeriksa apakah setidaknya salah satu nilai input bernilai True.

ANY_VALUE

Mengembalikan nilai dari rentang yang ditentukan.

APPROX_DISTINCT

Mengembalikan perkiraan jumlah nilai input unik dalam kolom tertentu.

ARG_MAX

Mengembalikan nilai kolom dari baris yang sesuai dengan nilai maksimum dari kolom tertentu.

ARG_MIN

Mengembalikan nilai kolom dari baris yang sesuai dengan nilai minimum dari kolom tertentu.

AVG

Anda dapat menghitung nilai rata-rata.

BITWISE_AND_AGG

Mengagregasi nilai input berdasarkan operasi bitwise AND.

BITWISE_OR_AGG

Mengagregasi nilai input berdasarkan operasi bitwise OR.

BITWISE_XOR_AGG

Mengagregasi nilai input berdasarkan operasi bitwise XOR.

BOOL_AND

Menjalankan operasi logika AND pada sekumpulan nilai Boolean.

BOOL_OR

Menjalankan operasi logika OR pada sekumpulan nilai Boolean.

COLLECT_LIST

Mengagregasi kolom yang ditentukan ke dalam array.

COLLECT_SET

Mengagregasi nilai unik dari kolom tertentu ke dalam array.

CORR

Menghitung Koefisien Korelasi Pearson dari dua kolom.

COUNT

Menghitung jumlah catatan.

COUNT_IF

Mengembalikan jumlah catatan yang nilai expr-nya bernilai True.

COVAR_POP

Menghitung kovarians populasi dari dua kolom numerik yang ditentukan.

COVAR_SAMP

Menghitung kovarians sampel dari dua kolom numerik yang ditentukan.

HISTOGRAM

Mengembalikan map yang berisi jumlah kemunculan setiap nilai input.

MAP_AGG

Anda dapat membuat Map dari dua bidang input.

MAP_UNION

Mengembalikan map baru yang merupakan gabungan dari semua map input.

MAP_UNION_SUM

Mengembalikan map baru yang merupakan gabungan dari semua map input. Map output menjumlahkan nilai-nilai dari kunci yang cocok di semua map input.

MAX

Anda dapat menghitung nilai maksimum.

MAX_BY

Mengembalikan nilai kolom dari baris yang sesuai dengan nilai maksimum dari kolom tertentu.

MEDIAN

Anda dapat menghitung median.

MIN

Menghitung nilai minimum.

MIN_BY

Mengembalikan nilai kolom dari baris yang sesuai dengan nilai minimum dari kolom tertentu.

MULTIMAP_AGG

Mengembalikan map yang dibuat menggunakan a dan b. a adalah kunci dalam map. b digunakan untuk membuat array, yang digunakan sebagai nilai kunci dalam map.

NUMERIC_HISTOGRAM

Mengembalikan histogram perkiraan berdasarkan kolom tertentu.

PERCENTILE

Menghitung persentil eksak. Fungsi ini cocok untuk skenario di mana jumlah data yang dihitung kecil.

PERCENTILE_APPROX

Mengembalikan persentil perkiraan. Fungsi ini berlaku untuk skenario di mana jumlah data yang dihitung besar.

PERCENTILE_CONT

Menghitung persentil eksak.

PERCENTILE_DISC

Menghitung nilai persentil tertentu.

STDDEV

Mengembalikan simpangan baku populasi dari semua nilai input.

STDDEV_SAMP

Mengembalikan simpangan baku sampel dari semua nilai input.

SUM

Mengembalikan jumlah dari suatu kolom.

VAR_SAMP

Menghitung varians sampel dari kolom numerik tertentu.

VARIANCE/VAR_POP

Menghitung varians dari kolom numerik tertentu.

WM_CONCAT

Menggabungkan string dengan delimiter tertentu.

Perhatian

MaxCompute V2.0 menyediakan fungsi tambahan. Jika fungsi yang Anda gunakan melibatkan tipe data baru yang didukung dalam edisi tipe data MaxCompute V2.0, Anda harus mengeksekusi pernyataan SET untuk mengaktifkan edisi tipe data MaxCompute V2.0. Tipe data baru tersebut mencakup TINYINT, SMALLINT, INT, FLOAT, VARCHAR, TIMESTAMP, dan BINARY.

  • Tingkat sesi: Untuk menggunakan tipe data baru, tambahkan pernyataan set odps.sql.type.system.odps2=true; sebelum pernyataan SQL Anda dan kirimkan keduanya bersamaan untuk dieksekusi.

  • Pemilik Proyek dapat mengonfigurasi pengaturan di tingkat proyek sesuai kebutuhan. Perubahan tersebut berlaku dalam waktu 10 hingga 15 menit. Perintahnya sebagai berikut.

    setproject odps.sql.type.system.odps2=true;

    Untuk informasi lebih lanjut tentang setproject, lihat Operasi Proyek. Untuk informasi lebih lanjut tentang perhatian dalam mengaktifkan tipe data tingkat proyek, lihat Versi tipe data.

  • Satu worker dapat berisi maksimal 2 juta elemen.

Jika Anda menggunakan pernyataan SQL yang mencakup beberapa fungsi agregat dan sumber daya proyek tidak mencukupi, kemungkinan terjadi overflow memori. Kami menyarankan Anda mengoptimalkan pernyataan SQL atau membeli sumber daya komputasi sesuai kebutuhan.

Sintaksis

Sintaksis fungsi agregat:

<aggregate_name>(<expression>[,...]) [WITHIN GROUP (ORDER BY <col1>[,<col2>…])] [FILTER (WHERE <where_condition>)]
  • <aggregate_name>(<expression>[,...]): fungsi agregat bawaan atau fungsi agregat yang didefinisikan pengguna (UDAF). Format spesifik bergantung pada sintaksis fungsi agregat.

  • WITHIN GROUP (ORDER BY <col1>[,<col2>…]): Jika fungsi agregat berisi ekspresi ini, data input dari <col1>[,<col2>…] diurutkan secara ascending secara default. Untuk mengurutkan data secara descending, gunakan ekspresi WITHIN GROUP (ORDER BY <col1>[,<col2>…] DESC).

    Perhatikan hal berikut saat menggunakan ekspresi ini:

    • Anda hanya dapat menggunakan ekspresi ini untuk WM_CONCAT, COLLECT_LIST, COLLECT_SET, dan UDAF.

    • Jika beberapa fungsi agregat dalam pernyataan SELECT berisi ekspresi WITHIN GROUP (ORDER BY <col1>[,<col2>…]), klausa ORDER BY <col1>[,<col2>…] harus identik di semua fungsi tersebut.

    • Jika parameter fungsi agregat mencakup kata kunci DISTINCT, hanya kolom DISTINCT yang dapat digunakan dalam klausa ORDER BY <col1>[,<col2>…]. Kumpulan kolom dalam klausa ORDER BY harus merupakan subset dari kolom DISTINCT. Selain itu, tipe data bidang dalam <col1>[,<col2>…] harus sesuai dengan tipe data parameter input fungsi agregat.

      Catatan

      Fungsi agregat yang mendukung ekspresi WITHIN GROUP (ORDER BY <col1>[,<col2>…]) hanya menerima satu parameter input. Oleh karena itu, jika fungsi agregat menggunakan kata kunci DISTINCT, klausa ORDER BY hanya dapat mencakup satu kolom, dan tipe datanya harus sesuai dengan tipe data parameter input fungsi agregat.

      Sebagai contoh, parameter input fungsi WM_CONCAT harus bertipe STRING, sehingga bidang setelah klausa ORDER BY juga harus bertipe STRING. Untuk informasi lebih lanjut, lihat Contoh 4 di bawah. Untuk detail pembuatan tabel emp yang digunakan dalam contoh, lihat WM_CONCAT.

    Contoh:

    -- Contoh 1: Urutkan data input secara ascending lalu kembalikan output.
    SELECT x, wm_concat(',', y) WITHIN GROUP (ORDER BY y) FROM 
      VALUES('k', 1),('k', 3),('k', 2) AS t(x, y) GROUP BY x;
    -- Hasil berikut dikembalikan.
    +------------+------------+
    | x          | _c1        |
    +------------+------------+
    | k          | 1,2,3      |
    +------------+------------+
    
    -- Contoh 2: Urutkan data input secara descending lalu kembalikan output.
    SELECT x, wm_concat(',', y) WITHIN GROUP (ORDER BY y DESC) FROM
      VALUES('k', 1),('k', 3),('k', 2) AS t(x, y) GROUP BY x;
    -- Hasil berikut dikembalikan.
    +------------+------------+
    | x          | _c1        |
    +------------+------------+
    | k          | 3,2,1      |
    +------------+------------+
    
    -- Contoh 3
    SELECT id, wm_concat(DISTINCT ',', name) WITHIN GROUP (ORDER BY name DESC) FROM 
      VALUES('k', '1'),('k', '3'),('k', '2') AS t(id, name) GROUP BY id;
    
    -- Hasil berikut dikembalikan.
    +------------+------------+
    | id         | _c1        |
    +------------+------------+
    | k          | 3,2,1      |
    +------------+------------+
    
    -- Contoh 4
    -- Karena parameter fungsi agregat berisi kata kunci DISTINCT, parameter input sal bertipe BIGINT dalam fungsi wm_concat dikonversi secara implisit ke tipe STRING.
    -- Agar konsisten dengan tipe parameter input fungsi wm_concat, Anda harus menggunakan cast untuk mengonversi sal ke tipe STRING dalam `order by sal`. Jika tidak, kesalahan akan dilaporkan.
    SELECT deptno, wm_concat(DISTINCT ',', sal) 
      WITHIN GROUP (ORDER BY cast(sal AS STRING ) DESC) 
      FROM emp GROUP BY deptno ORDER BY deptno;
    
    -- Hasil berikut dikembalikan.
    +------------+------------+
    | deptno     | _c1        |
    +------------+------------+
    | 10         | 5000,2450,1300 |
    | 20         | 800,3000,2975,1100 |
    | 30         | 950,2850,1600,1500,1250 |
    +------------+------------+
  • [FILTER (WHERE <where_condition>)]: Jika fungsi agregat berisi ekspresi ini, fungsi tersebut hanya memproses data yang memenuhi <where_condition>. Untuk informasi lebih lanjut tentang <where_condition>, lihat Klausa WHERE (where_condition).

    Perhatikan hal berikut saat menggunakan ekspresi ini:

    • Hanya fungsi agregat bawaan yang mendukung ekspresi ini. UDAF tidak mendukung ekspresi ini.

    • count(*) mendukung ekspresi [FILTER (WHERE <where_condition>)].

    • COUNT_IF tidak mendukung ekspresi [FILTER (WHERE <where_condition>)].

    Contoh:

    -- Contoh 1: Filter dan agregasi data.
    select
      sum(x),
      sum(x) filter (where y > 1),
      sum(x) filter (where y > 2)
      from values(null, 1),(1, 2),(2, 3),(3, null) as t(x, y);
    -- Hasil berikut dikembalikan.
    +------------+------------+------------+
    | _c0        | _c1        | _c2        |
    +------------+------------+------------+
    | 6          | 3          | 2          |
    +------------+------------+------------+
    
    -- Contoh 2: Gunakan beberapa fungsi agregat untuk filter dan agregasi data.
    select
      count_if(x > 2),
      sum(x) filter (where y > 1),
      sum(x) filter (where y > 2)
      from values(null, 1),(1, 2),(2, 3),(3, null) as t(x, y);
    -- Hasil berikut dikembalikan.
    +------------+------------+------------+
    | _c0        | _c1        | _c2        |
    +------------+------------+------------+
    | 1          | 3          | 2          |
    +------------+------------+------------+

Data sampel

Contoh berikut menggunakan data sampel ini. Buat dan isi tabel emp:

create table if not exists emp
   (empno bigint,
    ename string,
    job string,
    mgr bigint,
    hiredate datetime,
    sal bigint,
    comm bigint,
    deptno bigint);
tunnel upload emp.txt emp;

File emp.txt berisi data berikut:

7369,SMITH,CLERK,7902,1980-12-17 00:00:00,800,,20
7499,ALLEN,SALESMAN,7698,1981-02-20 00:00:00,1600,300,30
7521,WARD,SALESMAN,7698,1981-02-22 00:00:00,1250,500,30
7566,JONES,MANAGER,7839,1981-04-02 00:00:00,2975,,20
7654,MARTIN,SALESMAN,7698,1981-09-28 00:00:00,1250,1400,30
7698,BLAKE,MANAGER,7839,1981-05-01 00:00:00,2850,,30
7782,CLARK,MANAGER,7839,1981-06-09 00:00:00,2450,,10
7788,SCOTT,ANALYST,7566,1987-04-19 00:00:00,3000,,20
7839,KING,PRESIDENT,,1981-11-17 00:00:00,5000,,10
7844,TURNER,SALESMAN,7698,1981-09-08 00:00:00,1500,0,30
7876,ADAMS,CLERK,7788,1987-05-23 00:00:00,1100,,20
7900,JAMES,CLERK,7698,1981-12-03 00:00:00,950,,30
7902,FORD,ANALYST,7566,1981-12-03 00:00:00,3000,,20
7934,MILLER,CLERK,7782,1982-01-23 00:00:00,1300,,10
7948,JACCKA,CLERK,7782,1981-04-12 00:00:00,5000,,10
7956,WELAN,CLERK,7649,1982-07-20 00:00:00,2450,,10
7956,TEBAGE,CLERK,7748,1982-12-30 00:00:00,1300,,10

Ekspresi filter

  • Batasan

    • Hanya fungsi agregat bawaan MaxCompute yang mendukung ekspresi filter. UDAF tidak mendukung ekspresi filter.

    • count(*) tidak dapat digunakan dengan ekspresi filter. Gunakan fungsi COUNT_IF sebagai gantinya.

  • Sintaksis

    <aggregate_name>(<expression>[,...]) [filter (where <where_condition>)]
  • Deskripsi

    Semua fungsi agregat mendukung ekspresi filter. Jika Anda menentukan kondisi filter, hanya data baris yang memenuhi kondisi filter yang dapat diteruskan ke fungsi agregat terkait untuk pemrosesan data.

  • Deskripsi.

    • aggregate_name: wajib. Nama fungsi agregat. Pilih fungsi agregat yang dijelaskan dalam topik ini sesuai kebutuhan.

    • expression: wajib. Parameter fungsi agregat yang Anda pilih. Tentukan parameter ini berdasarkan deskripsi fungsi agregat yang Anda pilih.

    • where_condition: opsional. Kondisi filter. Untuk informasi lebih lanjut tentang where_condition, lihat Klausa WHERE (where_condition).

  • Deskripsi nilai kembalian.

    Untuk informasi lebih lanjut, lihat deskripsi nilai kembali untuk setiap fungsi agregat.

  • Contoh penggunaan

    select sum(sal) filter (where deptno=10), sum(sal) filter (where deptno=20), sum(sal) filter (where deptno=30) from emp;

    Hasil berikut dikembalikan:

    +------------+------------+------------+
    | _c0        | _c1        | _c2        |
    +------------+------------+------------+
    | 17500      | 10875      | 9400       |
    +------------+------------+------------+

ANY

  • Sintaksis

    BOOLEAN ANY(BOOLEAN <colname>)
  • Deskripsi

    Mengagregasi nilai-nilai dalam kolom yang ditentukan oleh colname ke dalam array dan memeriksa apakah setidaknya satu elemen bernilai TRUE. Jika setidaknya satu nilai bernilai TRUE, fungsi mengembalikan TRUE.

  • Deskripsi.

    colname: Wajib. Kolom harus bertipe BOOLEAN.

  • Nilai kembali

    Mengembalikan nilai bertipe BOOLEAN. Jika nilai colname adalah NULL, baris tersebut dikecualikan dari perhitungan.

  • Contoh

    -- Mengembalikan true.
    SELECT ANY(colname) FROM VALUES (true), (false), (false) AS tab(colname);
    -- Mengembalikan true.
    SELECT ANY(colname) FROM VALUES (NULL), (true), (false) AS tab(colname);
    -- Mengembalikan false.
    SELECT ANY(colname) FROM VALUES (false), (false), (NULL) AS tab(colname);
    -- Mengembalikan true.
    SELECT ANY(colname1) FILTER(WHERE colname2 = 2) FROM VALUES (true, 1), (false, 1), (true, 2) AS tab(colname1, colname2);

ANY_VALUE

  • Sintaksis

    any_value(<colname>)
  • Deskripsi

    Fungsi ekstensi MaxCompute V2.0 ini mengembalikan nilai arbitrer dari rentang yang ditentukan.

  • Parameter

    colname: Wajib. Kolom dapat bertipe data apa pun.

  • Nilai kembali

    Tipe data nilai kembali sama dengan tipe data parameter colname. Jika nilai parameter colname adalah null, baris yang berisi nilai ini tidak digunakan untuk perhitungan.

  • Contoh

    • Contoh 1: Pilih salah satu karyawan. Pernyataan contoh:

      select any_value(ename) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | SMITH      |
      +------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan memilih karyawan acak dari setiap kelompok. Perintah contoh:

      select deptno, any_value(ename) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | CLARK      |
      | 20         | SMITH      |
      | 30         | ALLEN      |
      +------------+------------+

APPROX_DISTINCT

  • Sintaksis

    approx_distinct(<colname>)
  • Deskripsi Perintah

    Mengembalikan perkiraan jumlah nilai input unik dalam kolom tertentu. Fungsi ini merupakan fungsi tambahan MaxCompute V2.0.

  • Deskripsi

    colname: wajib. Nama kolom tempat duplikat perlu dihapus.

  • Nilai kembali

    Nilai bertipe BIGINT dikembalikan. Fungsi ini menghasilkan kesalahan standar sebesar 5%. Jika nilai kolom yang ditentukan oleh parameter colname adalah null, baris yang berisi nilai ini tidak digunakan untuk perhitungan.

  • Contoh

    • Contoh 1: Hitung perkiraan jumlah nilai unik dalam kolom sal. Pernyataan contoh:

      select approx_distinct(sal) from emp;

      Hasil berikut dikembalikan:

      +-------------------+
      | numdistinctvalues |
      +-------------------+
      | 12                |
      +-------------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan menghitung perkiraan jumlah nilai gaji (sal) unik dalam setiap kelompok. Perintah contoh:

      select deptno, approx_distinct(sal) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+-------------------+
      | deptno     | numdistinctvalues |
      +------------+-------------------+
      | 10         | 3                 |
      | 20         | 4                 |
      | 30         | 5                 |
      +------------+-------------------+

ARG_MAX

  • Sintaksis

    arg_max(<valueToMaximize>, <valueToReturn>)
  • Deskripsi perintah.

    Menemukan baris tempat nilai valueToMaximize berada dan mengembalikan nilai valueToReturn dalam baris tersebut. Fungsi ini merupakan fungsi tambahan MaxCompute V2.0.

  • Deskripsi

    • valueToMaximize: Wajib. Parameter ini menerima tipe data apa pun.

    • valueToReturn: Wajib. Parameter ini menerima nilai tipe data apa pun.

  • Nilai kembali

    Tipe data nilai kembali sama dengan tipe data parameter valueToReturn. Jika beberapa baris berisi nilai terbesar dari valueToMaximize, nilai valueToReturn dari salah satu baris tersebut dikembalikan secara acak. Jika nilai valueToMaximize adalah null, baris yang berisi nilai ini tidak digunakan untuk perhitungan.

  • Contoh

    • Contoh 1: Mengembalikan nama karyawan dengan gaji tertinggi. Pernyataan contoh:

      select arg_max(sal, ename) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | KING       |
      +------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan mengembalikan nama karyawan dengan gaji tertinggi dalam setiap kelompok. Perintah contoh:

      select deptno, arg_max(sal, ename) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | KING       |
      | 20         | SCOTT      |
      | 30         | BLAKE      |
      +------------+------------+

ARG_MIN

  • Sintaksis

    arg_min(<valueToMinimize>, <valueToReturn>)
  • Deskripsi

    Menemukan baris tempat nilai minimum valueToMinimize berada dan mengembalikan nilai valueToReturn dalam baris tersebut. Fungsi ini merupakan fungsi tambahan MaxCompute V2.0.

  • Deskripsi

    • valueToMinimize: wajib. Nilai tipe data apa pun.

    • valueToReturn: wajib. Nilai tipe data apa pun.

  • Nilai kembali dijelaskan di bawah ini.

    Tipe data nilai kembali sama dengan tipe data parameter valueToReturn. Jika beberapa baris berisi nilai terkecil dari valueToMinimize, nilai valueToReturn dari salah satu baris tersebut dikembalikan secara acak. Jika nilai valueToMinimize adalah null, baris yang berisi nilai ini tidak digunakan untuk perhitungan.

  • Contoh

    • Contoh 1: Mengembalikan nama karyawan dengan gaji terendah. Pernyataan contoh:

      select arg_min(sal, ename) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | SMITH      |
      +------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan mengembalikan nama karyawan dengan gaji terendah dalam setiap kelompok. Perintah contoh:

      select deptno, arg_min(sal, ename) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | MILLER     |
      | 20         | SMITH      |
      | 30         | JAMES      |
      +------------+------------+

AVG

  • Sintaksis

    DECIMAL|DOUBLE  avg(<colname>)
  • Deskripsi

    Menghitung nilai rata-rata.

  • Deskripsi.

    colname: wajib. Nilai kolom mendukung semua tipe data dan dapat dikonversi ke tipe DOUBLE sebelum perhitungan.

  • Nilai kembali

    Jika nilai colname adalah null, baris yang berisi nilai ini tidak digunakan untuk perhitungan. Tabel berikut menjelaskan pemetaan antara tipe data input dan nilai kembali.

    Tipe input

    Tipe nilai kembali

    TINYINT

    DOUBLE

    SMALLINT

    DOUBLE

    INT

    DOUBLE

    BIGINT

    DOUBLE

    FLOAT

    DOUBLE

    DOUBLE

    DOUBLE

    DECIMAL

    DECIMAL

  • Contoh

    • Contoh 1: Hitung nilai rata-rata gaji (sal) semua karyawan. Pernyataan contoh:

      select avg(sal) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | 2222.0588235294117 |
      +------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan menghitung gaji rata-rata (sal) untuk setiap departemen. Perintah contoh:

      select deptno, avg(sal) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | 2916.6666666666665 |
      | 20         | 2175.0     |
      | 30         | 1566.6666666666667 |
      +------------+------------+

BITWISE_AND_AGG

  • Sintaksis

    BIGINT bitwise_and_agg(BIGINT value)
  • Deskripsi

    Mengagregasi nilai input berdasarkan operasi bitwise AND.

  • Deskripsi.

    value: Wajib. Nilai bertipe BIGINT. Nilai NULL dikecualikan dari perhitungan.

  • Nilai kembali

    Nilai bertipe BIGINT dikembalikan.

  • Contoh

    SELECT id, bitwise_and_agg(v) FROM
        VALUES (1L, 2L), (1L, 1L), (2L, null), (1L, null) t(id, v) GROUP BY id;

    Hasil berikut dikembalikan:

    +------------+------------+
    | id         | _c1        |
    +------------+------------+
    | 1          | 0          |
    | 2          | NULL       |
    +------------+------------+

BITWISE_OR_AGG

  • Ini adalah deklarasi fungsi.

    bigint bitwise_or_agg(bigint value)
  • Deskripsi

    Mengagregasi nilai input berdasarkan operasi bitwise OR.

  • Deskripsi Metrik

    value: wajib. Nilai bertipe BIGINT. Nilai null tidak digunakan untuk perhitungan.

  • Deskripsi nilai kembalian.

    Nilai bertipe BIGINT dikembalikan.

  • Contoh

    select id, bitwise_or_agg(v) from
        values (1L, 2L), (1L, 1L), (2L, null), (1L, null) t(id, v) group by id;

    Hasil berikut dikembalikan:

    +------------+------------+
    | id         | _c1        |
    +------------+------------+
    | 1          | 3          |
    | 2          | NULL       |
    +------------+------------+

BITWISE_XOR_AGG

  • Deklarasi fungsi.

    BIGINT BITWISE_XOR_AGG(BIGINT|INT|SMALLINT|TINYINT value)
  • Deskripsi

    Mengagregasi nilai input menggunakan operasi bitwise XOR.

  • Deskripsi Metrik

    value: Wajib. Nilai bertipe BIGINT, INT, SMALLINT, atau TINYINT. Nilai NULL dikecualikan dari perhitungan.

  • Nilai kembali

    Mengembalikan nilai bertipe BIGINT. Aturan berikut berlaku:

    • Jika value bukan bertipe BIGINT, INT, SMALLINT, atau TINYINT, kesalahan dikembalikan.

    • Mengembalikan NULL jika value adalah NULL.

  • Contoh

    SELECT id, bitwise_xor_agg(v) FROM 
      VALUES (1L, 2L), (1L, 1L), (2L, NULL), (1L, NULL) t(id, v) GROUP BY id;

    Hasil berikut dikembalikan.

    +------------+------------+
    | id         | _c1        | 
    +------------+------------+
    | 1          | 3          | 
    | 2          | NULL       | 
    +------------+------------+

BOOL_AND

  • Sintaksis

    BOOLEAN BOOL_AND(<colname>)
  • Deskripsi perintah.

    Mengagregasi nilai-nilai dalam kolom yang ditentukan oleh colname ke dalam array dan melakukan operasi logika AND pada nilai Boolean.

  • Parameter

    colname: Wajib. Nama kolom tabel. Kolom harus bertipe BOOLEAN.

  • Nilai kembali

    Mengembalikan nilai bertipe BOOLEAN. Aturan berikut berlaku:

    • Jika semua nilai input bernilai true, fungsi mengembalikan true. Jika tidak, mengembalikan false.

    • Fungsi BOOL_AND() mengabaikan nilai NULL dalam kelompok.

  • Contoh

    -- Contoh 1: Lakukan operasi logika AND sederhana.
    SELECT bool_and(colname) FROM VALUES (true), (false), (true) AS tab(colname);
    -- Hasil berikut dikembalikan.
    +------+
    | _c0  | 
    +------+
    | false | 
    +------+
    
    -- Contoh 2: Fungsi BOOL_AND() mengabaikan nilai NULL dalam kelompok.
    SELECT bool_and(colname) FROM VALUES (NULL), (true), (true) AS tab(colname);
    -- Hasil berikut dikembalikan.
    +------+
    | _c0  | 
    +------+
    | true | 
    +------+
    
    -- Contoh 3: Agregasi hanya kolom tertentu.
    SELECT bool_and(colname1) FROM VALUES (true, 1), (false, 2), (true, 1) AS tab(colname1, colname2);
    -- Hasil berikut dikembalikan.
    +------+
    | _c0  | 
    +------+
    | false | 
    +------+
    
    -- Contoh 4: Lakukan operasi logika AND setelah filtering.
    SELECT bool_and(colname1) FILTER(WHERE colname2 = 1) FROM VALUES (true, 1), (false, 2), (true, 1) AS tab(colname1, colname2);
    -- Hasil berikut dikembalikan.
    +------+
    | _c0  | 
    +------+
    | true | 
    +------+

BOOL_OR

  • Sintaksis

    BOOLEAN BOOL_OR(BOOLEAN <colname>)
  • Topik ini menjelaskan perintah tersebut.

    Mengagregasi nilai-nilai dalam kolom yang ditentukan oleh colname ke dalam array dan melakukan operasi logika OR pada nilai Boolean.

  • Detail Metrik

    colname: Wajib. Nama kolom tabel. Kolom harus bertipe BOOLEAN.

  • Nilai kembali

    Mengembalikan nilai bertipe BOOLEAN. Aturan berikut berlaku:

    • Jika setidaknya satu nilai input dalam kelompok bernilai true, fungsi mengembalikan true. Jika semua nilai bernilai false, fungsi mengembalikan false.

    • Fungsi BOOL_OR() mengabaikan nilai NULL dalam kelompok.

  • Contoh

    -- Contoh 1: Lakukan operasi logika OR sederhana.
    SELECT bool_or(colname) FROM VALUES (true), (false), (false) AS tab(colname);
    -- Hasil berikut dikembalikan.
    +------+
    | _c0  | 
    +------+
    | true | 
    +------+
    
    -- Contoh 2: Fungsi BOOL_OR() mengabaikan nilai NULL dalam kelompok.
    SELECT bool_or(colname) FROM VALUES (NULL), (true), (false) AS tab(colname);
    -- Hasil berikut dikembalikan.
    +------+
    | _c0  | 
    +------+
    | true | 
    +------+
    
    -- Contoh 3
    SELECT bool_or(colname1) FROM VALUES (false), (false), (NULL) AS tab(colname1);
    -- Hasil berikut dikembalikan.
    +------+
    | _c0  | 
    +------+
    | false | 
    +------+
    
    -- Contoh 4: Lakukan operasi logika OR setelah filtering.
    SELECT bool_or(colname1) FILTER(WHERE colname2 = 1) FROM VALUES (true, 1), (false, 1), (true, 2) AS tab(colname1, colname2);
    -- Hasil berikut dikembalikan.
    +------+
    | _c0  | 
    +------+
    | true | 
    +------+

COLLECT_LIST

  • Sintaksis

    array collect_list(<colname>)
  • Deskripsi

    Mengagregasi nilai-nilai dalam kolom yang ditentukan oleh colname ke dalam array. Fungsi ini merupakan ekstensi yang disediakan oleh MaxCompute V2.0.

  • Parameter

    colname: Wajib. Nama kolom tabel. Kolom dapat bertipe data apa pun.

  • Nilai kembali

    Nilai bertipe ARRAY dikembalikan. Jika nilai kolom yang ditentukan oleh colname adalah null, baris yang berisi nilai ini tidak digunakan untuk perhitungan.

  • Contoh

    • Contoh 1: Agregasi nilai gaji (sal) semua karyawan ke dalam array. Pernyataan contoh:

      select collect_list(sal) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | [800,1600,1250,2975,1250,2850,2450,3000,5000,1500,1100,950,3000,1300,5000,2450,1300] |
      +------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan mengagregasi gaji (sal) karyawan dalam kelompok yang sama ke dalam array. Perintah contoh:

      select deptno, collect_list(sal) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | [2450,5000,1300,5000,2450,1300] |
      | 20         | [800,2975,3000,1100,3000] |
      | 30         | [1600,1250,1250,2850,1500,950] |
      +------------+------------+
    • Contoh 3: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan mengagregasi nilai gaji (sal) unik karyawan dalam kelompok yang sama ke dalam array. Perintah contoh:

      select deptno, collect_list(distinct sal) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | [1300,2450,5000] |
      | 20         | [800,1100,2975,3000] |
      | 30         | [950,1250,1500,1600,2850] |
      +------------+------------+

COLLECT_SET

  • Sintaksis

    array collect_set(<colname>)
  • Deskripsi

    Mengagregasi nilai-nilai yang ditentukan oleh colname ke dalam array yang hanya berisi nilai unik. Fungsi ini merupakan fungsi tambahan MaxCompute V2.0.

  • Deskripsi

    colname: wajib. Nama kolom, yang dapat bertipe data apa pun.

  • Nilai kembali

    Nilai bertipe ARRAY dikembalikan. Jika nilai kolom yang ditentukan oleh colname adalah null, baris yang berisi nilai ini tidak digunakan untuk perhitungan.

  • Contoh

    • Contoh 1: Agregasi nilai gaji (sal) semua karyawan ke dalam array yang hanya berisi nilai unik. Pernyataan contoh:

      select collect_set(sal) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | [800,950,1100,1250,1300,1500,1600,2450,2850,2975,3000,5000] |
      +------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan mengagregasi gaji (sal) karyawan dalam kelompok yang sama ke dalam array nilai unik. Perintah contoh:

      select deptno, collect_set(sal) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | [1300,2450,5000] |
      | 20         | [800,1100,2975,3000] |
      | 30         | [950,1250,1500,1600,2850] |
      +------------+------------+

CORR

  • Sintaksis

    double corr(<col1>, <col2>)
  • Deskripsi

    Menghitung koefisien korelasi Pearson dari dua kolom data. Ini merupakan fungsi ekstensi dalam MaxCompute V2.0.

  • Parameter

    col1 dan col2: Wajib. Nama dua kolom dalam tabel untuk menghitung koefisien korelasi Pearson. Kolom harus bertipe DOUBLE, BIGINT, INT, SMALLINT, TINYINT, FLOAT, atau DECIMAL. Tipe data col1 dan col2 dapat berbeda.

  • Nilai kembali

    Nilai bertipe DOUBLE dikembalikan. Jika baris dalam kolom input berisi nilai NULL, baris tersebut tidak digunakan dalam perhitungan.

  • Contoh

    Berdasarkan data sampel, perintah berikut menghitung koefisien korelasi Pearson dari kolom double_data dan float_data.

    select corr(double_data,float_data) from mf_math_fun_t;

    Nilai kembali adalah 1.0.

COUNT

Sintaksis

-- Hitung jumlah catatan.
BIGINT COUNT([DISTINCT|ALL] <colname>)

-- Hitung jumlah catatan dalam window.
BIGINT COUNT(*) OVER ([partition_clause] [orderby_clause] [frame_clause])
BIGINT COUNT([DISTINCT] <expr>[,...]) OVER ([partition_clause] [orderby_clause] [frame_clause])

Parameter

Parameter

Wajib

Deskripsi

DISTINCT | ALL

Tidak

Mengontrol penanganan duplikat. ALL (default) menghitung semua baris non-NULL. DISTINCT hanya menghitung nilai unik non-NULL.

colname

Ya

Kolom yang akan dihitung. Menerima tipe data apa pun. Gunakan * untuk menghitung semua baris, termasuk baris tempat nilai kolom adalah NULL.

expr

Ya

Ekspresi tipe data apa pun. Baris NULL dikecualikan. Dengan DISTINCT, hanya nilai unik non-NULL yang dihitung. COUNT([DISTINCT] <expr>[,...]) OVER menghitung baris tempat semua ekspresi yang ditentukan bernilai non-NULL.

partition_clause, orderby_clause, frame_clause

Tidak

Klausa definisi window. Lihat Ikhtisar Fungsi Window.

Nilai kembali

Mengembalikan BIGINT. Baris NULL dikecualikan kecuali Anda menggunakan COUNT(*).

Contoh

Siapkan data uji

Jika Anda sudah memiliki data, Anda dapat melewati langkah ini.

  1. Unduh data uji test_data.txt.

  2. Buat tabel uji.

    CREATE TABLE IF NOT EXISTS emp(
      empno BIGINT,
      ename STRING,
      job STRING,
      mgr BIGINT,
      hiredate DATETIME,
      sal BIGINT,
      comm BIGINT,
      deptno BIGINT
    );
  3. Muat data.

    Ganti FILE_PATH dengan path dan nama file data yang sebenarnya.

    TUNNEL UPLOAD {{FILE_PATH}} emp;

Contoh 1: Partisi window tanpa pengurutan

Partisi window berdasarkan sal. Tanpa ORDER BY, setiap baris mengembalikan jumlah total baris dalam partisinya.

SELECT sal, COUNT(sal) OVER (PARTITION BY sal) AS count
FROM emp;

Hasil:

+------------+------------+
| sal        | count      |
+------------+------------+
| 800        | 1          |
| 950        | 1          |
| 1100       | 1          |
| 1250       | 2          |  -- Dua baris memiliki sal=1250; keduanya mengembalikan 2.
| 1250       | 2          |
| 1300       | 2          |
| 1300       | 2          |
| 1500       | 1          |
| 1600       | 1          |
| 2450       | 2          |
| 2450       | 2          |
| 2850       | 1          |
| 2975       | 1          |
| 3000       | 2          |
| 3000       | 2          |
| 5000       | 2          |
| 5000       | 2          |
+------------+------------+

Contoh 2: Partisi window dengan pengurutan (mode non-Hive compatible)

Dalam mode non-Hive compatible, menambahkan ORDER BY menghasilkan hitungan berjalan. Setiap baris mengembalikan jumlah kumulatif dari baris pertama hingga baris saat ini dalam partisinya.

-- Nonaktifkan mode Hive compatible.
SET odps.sql.hive.compatible=false;

SELECT sal, COUNT(sal) OVER (PARTITION BY sal ORDER BY sal) AS count
FROM emp;

Hasil:

+------------+------------+
| sal        | count      |
+------------+------------+
| 800        | 1          |
| 950        | 1          |
| 1100       | 1          |
| 1250       | 1          |  -- Hitungan berjalan dimulai dari 1 untuk baris pertama dalam partisi.
| 1250       | 2          |  -- Bertambah menjadi 2 untuk baris kedua.
| 1300       | 1          |
| 1300       | 2          |
| 1500       | 1          |
| 1600       | 1          |
| 2450       | 1          |
| 2450       | 2          |
| 2850       | 1          |
| 2975       | 1          |
| 3000       | 1          |
| 3000       | 2          |
| 5000       | 1          |
| 5000       | 2          |
+------------+------------+

Contoh 3: Partisi window dengan pengurutan (mode Hive compatible)

Dalam mode Hive compatible, ORDER BY tidak menghasilkan hitungan berjalan. Setiap baris dalam partisi mengembalikan jumlah total partisi, sama seperti menghilangkan ORDER BY.

-- Aktifkan mode Hive compatible.
SET odps.sql.hive.compatible=true;

SELECT sal, COUNT(sal) OVER (PARTITION BY sal ORDER BY sal) AS count
FROM emp;

Hasil:

+------------+------------+
| sal        | count      |
+------------+------------+
| 800        | 1          |
| 950        | 1          |
| 1100       | 1          |
| 1250       | 2          |  -- Kedua baris dalam partisi mengembalikan jumlah partisi penuh.
| 1250       | 2          |
| 1300       | 2          |
| 1300       | 2          |
| 1500       | 1          |
| 1600       | 1          |
| 2450       | 2          |
| 2450       | 2          |
| 2850       | 1          |
| 2975       | 1          |
| 3000       | 2          |
| 3000       | 2          |
| 5000       | 2          |
| 5000       | 2          |
+------------+------------+

Contoh 4: Hitung semua baris dalam tabel

SELECT COUNT(*) FROM emp;

Hasil:

+------------+
| _c0        |
+------------+
| 17         |
+------------+

Contoh 5: Hitung baris per kelompok

Gunakan COUNT dengan GROUP BY untuk mendapatkan jumlah karyawan per departemen.

SELECT deptno, COUNT(*) FROM emp GROUP BY deptno;

Hasil:

+------------+------------+
| deptno     | _c1        |
+------------+------------+
| 20         | 5          |
| 30         | 6          |
| 10         | 6          |
+------------+------------+

Contoh 6: Hitung nilai unik

Gunakan DISTINCT untuk menghitung jumlah departemen berbeda.

SELECT COUNT(DISTINCT deptno) FROM emp;

Hasil:

+------------+
| _c0        |
+------------+
| 3          |
+------------+

COUNT_IF

  • Sintaksis

    bigint count_if(boolean <expr>)
  • Deskripsi

    Mengembalikan jumlah catatan yang nilai expr-nya bernilai True.

  • Parameter

    expr: wajib. Ekspresi BOOLEAN.

  • Nilai kembali

    Nilai bertipe BIGINT dikembalikan. Jika nilai parameter expr bernilai False atau nilai kolom tertentu dalam expr adalah null, baris yang berisi nilai ini tidak digunakan untuk perhitungan.

  • Contoh

    select count_if(sal > 1000), count_if(sal <=1000) from emp;

    Hasil berikut dikembalikan:

    +------------+------------+
    | _c0        | _c1        |
    +------------+------------+
    | 15         | 2          |
    +------------+------------+

COVAR_POP

  • Sintaksis

    double covar_pop(<colname1>, <colname2>)
  • Deskripsi

    Menghitung kovarians populasi dari dua kolom numerik yang ditentukan. Fungsi ini merupakan fungsi tambahan MaxCompute V2.0.

  • Deskripsi Parameter

    colname1 dan colname2: wajib. Kolom bertipe data numerik. Jika kolom yang ditentukan bukan kolom numerik, nilai null dikembalikan.

  • Contoh

    Jalankan perintah berikut untuk menambahkan data ke tabel emp:

    -- sal_new adalah kolom gaji baru.
    alter table emp add columns (sal_new bigint);
    insert overwrite table emp select empno, ename, job, mgr, hiredate, sal, comm, deptno, sal+1000 from emp;
    • Contoh 1: Hitung kovarians populasi dari kolom sal dan sal_new. Pernyataan contoh:

      select covar_pop(sal, sal_new) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | 1594550.1730103805 |
      +------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan menghitung kovarians populasi dari kolom sal dan sal_new untuk setiap kelompok. Perintah contoh:

      select deptno, covar_pop(sal, sal_new) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | 2390555.5555555555 |
      | 20         | 1009500.0  |
      | 30         | 372222.2222222222 |
      +------------+------------+

COVAR_SAMP

  • Sintaksis

    double covar_samp(<colname1>, <colname2>)
  • Deskripsi

    Menghitung kovarians sampel dari dua kolom numerik yang ditentukan. Fungsi ini merupakan fungsi tambahan MaxCompute V2.0.

  • Deskripsi

    colname1 dan colname2: wajib. Kolom bertipe data numerik. Jika kolom yang ditentukan bukan kolom numerik, nilai null dikembalikan.

  • Contoh

    Jalankan perintah berikut untuk menambahkan data ke tabel emp:

    -- sal_new adalah kolom gaji baru.
    alter table emp add columns (sal_new bigint);
    insert overwrite table emp select empno, ename, job, mgr, hiredate, sal, comm, deptno, sal+1000 from emp;
    • Contoh 1: Hitung kovarians sampel dari kolom sal dan sal_new. Pernyataan contoh:

      select covar_samp(sal, sal_new) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | 1694209.5588235292 |
      +------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan menghitung kovarians sampel dari kolom sal dan sal_new untuk setiap kelompok. Perintah contoh:

      select deptno, covar_samp(sal, sal_new) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | 2868666.6666666665 |
      | 20         | 1261875.0  |
      | 30         | 446666.6666666666 |
      +------------+------------+

HISTOGRAM

  • Mendeklarasikan fungsi.

    map<K, bigint> histogram(K input);
  • Menjelaskan perintah.

    Mengembalikan map yang berisi jumlah kemunculan setiap nilai input. Kunci dalam map adalah nilai input. Setiap nilai dalam map adalah jumlah kemunculan nilai input. Nilai null diabaikan.

  • Deskripsi

    input: nilai input, yang digunakan sebagai kunci dalam map.

  • Nilai kembali

    Map yang berisi jumlah kemunculan setiap nilai input dikembalikan.

  • Contoh

    select histogram(a) from values
        ('hi'), (null), ('apple'), ('pie'), ('apple') t(a);

    Hasil berikut dikembalikan:

    +----------------------------+
    | _c0                        |
    +----------------------------+
    | {"pie":1,"hi":1,"apple":2} |
    +----------------------------+

MAP_AGG

  • Deklarasi Fungsi

    map<K, V> map_agg(K a, V b);
  • Topik ini menjelaskan perintah tersebut.

    Mengembalikan map yang dibuat menggunakan a dan b. a adalah kunci dalam map. b adalah nilai kunci dalam map. Jika kunci dalam map adalah null, kunci tersebut diabaikan. Jika bidang kunci memiliki nilai duplikat, salah satu nilainya dipertahankan secara acak.

  • Deskripsi.

    • a: bidang input yang digunakan sebagai kunci dalam map.

    • b: bidang input yang digunakan sebagai nilai dalam map.

  • Nilai kembali

    Map baru dikembalikan.

  • Contoh

    select map_agg(a, b) from
            values (1L, 'apple'), (2L, 'hi'), (null, 'good'), (1L, 'pie') t(a, b);

    Hasil berikut dikembalikan:

    +------------------------+
    | _c0                    |
    +------------------------+
    | {"2":"hi","1":"apple"} |
    +------------------------+

MAP_UNION

  • Deklarasi Fungsi

    map<K, V> map_union(map<K, V> input);
  • Bagian ini menjelaskan perintah-perintah tersebut.

    Mengembalikan map baru yang merupakan gabungan dari semua map input. Jika kunci ada di beberapa map input, salah satu nilai yang sesuai dengan kunci tersebut dipertahankan secara acak.

  • Parameter

    input: map input.

  • Deskripsi nilai kembalian.

    Map baru dikembalikan.

  • Contoh

    select map_union(a) from values
        (map(1L, 'hi', 2L, 'apple', 3L, 'pie')), (map(1L, 'good', 4L, 'this')), (null) t(a);

    Hasil berikut dikembalikan:

    +-----------------------------------------------+
    | _c0                                           |
    +-----------------------------------------------+
    | {"4":"this","1":"good","2":"apple","3":"pie"} |
    +-----------------------------------------------+

MAP_UNION_SUM

  • Deklarasi Fungsi

    map<K, V> map_union_sum(map<K, V> input);
  • Deskripsi

    Mengembalikan map baru yang merupakan gabungan dari semua map input. Map output menjumlahkan nilai-nilai dari kunci yang cocok di semua map input. Jika nilai yang sesuai dengan kunci adalah NULL, nilai tersebut dikonversi menjadi 0.

    Catatan

    Nilai dalam map input harus bertipe data BIGINT, INT, SMALLINT, TINYINT, FLOAT, DOUBLE, atau DECIMAL.

  • Deskripsi parameter.

    input: map input.

  • Deskripsi nilai kembalian.

    Map baru dikembalikan.

    Catatan

    Nilai dalam map baru bertipe BIGINT, DOUBLE, atau DECIMAL.

  • Contoh

    select map_union_sum(a) from values
        (map('hi', 2L, 'apple', 3L, 'pie', 1L)), (map('apple', null, 'hi', 4L)), (null) t(a);

    Hasil berikut dikembalikan:

    +----------------------------+
    | _c0                        |
    +----------------------------+
    | {"apple":3,"hi":6,"pie":1} |
    +----------------------------+

MAX

  • Sintaksis

    max(<colname>)
  • Deskripsi

    Mengembalikan nilai maksimum dari suatu kolom.

  • Deskripsi parameter.

    colname: wajib. Nama kolom, yang dapat bertipe data apa pun selain BOOLEAN.

  • Nilai kembali

    Tipe nilai kembali sama dengan tipe parameter colname. Nilai kembali bervariasi berdasarkan aturan berikut:

    • Jika nilai colname adalah null, baris yang berisi nilai ini tidak digunakan untuk perhitungan.

    • Jika nilai colname bertipe BOOLEAN, nilai tersebut tidak digunakan untuk perhitungan.

  • Contoh

    • Contoh 1: Hitung gaji tertinggi (sal) semua karyawan. Pernyataan contoh:

      select max(sal) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | 5000       |
      +------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan menghitung gaji tertinggi (sal) di setiap departemen. Perintah contoh:

      select deptno, max(sal) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | 5000       |
      | 20         | 3000       |
      | 30         | 2850       |
      +------------+------------+

MAX_BY

  • Sintaksis

    max_by(<valueToReturn>,<valueToMaximize>)
  • Deskripsi

    Catatan

    Fungsi MAX_BY menyediakan fitur yang sama dengan fungsi ARG_MAX. Perbedaannya terletak pada urutan parameter. Fungsi MAX_BY diperkenalkan dalam MaxCompute untuk menjaga kompatibilitas dengan sintaksis open source.

    Menemukan baris tempat nilai valueToMaximize berada dan mengembalikan nilai valueToReturn dalam baris tersebut. Fungsi ini merupakan fungsi tambahan MaxCompute V2.0.

  • Deskripsi Parameter

    • valueToMaximize: wajib. Nilai tipe data apa pun.

    • valueToReturn: wajib. Nilai tipe data apa pun.

  • Nilai kembali

    Tipe data nilai kembali sama dengan tipe data parameter valueToReturn. Jika beberapa baris memiliki nilai terbesar dari valueToMaximize, nilai valueToReturn dari salah satu baris tersebut dikembalikan secara acak. Jika nilai valueToMaximize adalah null, baris yang berisi nilai ini tidak digunakan untuk perhitungan.

  • Contoh

    • Contoh 1: Mengembalikan nama karyawan dengan gaji tertinggi. Pernyataan contoh:

      select max_by(ename,sal) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | KING       |
      +------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan mengembalikan nama karyawan dengan gaji tertinggi dalam setiap kelompok. Perintah contoh:

      select deptno, max_by(ename,sal) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | KING       |
      | 20         | SCOTT      |
      | 30         | BLAKE      |
      +------------+------------+

MEDIAN

  • Sintaksis

    double median(double <colname>)
    decimal median(decimal <colname>)
  • Deskripsi

    Mengembalikan nilai median dari suatu kolom.

  • Deskripsi

    colname: wajib. Nama kolom, yang dapat bertipe DOUBLE atau DECIMAL. Jika nilai input bertipe STRING atau BIGINT, nilai tersebut dikonversi secara implisit ke tipe DOUBLE sebelum perhitungan.

  • Nilai kembali

    Jika nilai colname adalah null, baris yang berisi nilai ini tidak digunakan untuk perhitungan. Tabel berikut menjelaskan pemetaan antara tipe data input dan nilai kembali.

    Tipe input

    Tipe nilai kembali

    TINYINT

    DOUBLE

    SMALLINT

    DOUBLE

    INT

    DOUBLE

    BIGINT

    DOUBLE

    FLOAT

    DOUBLE

    DOUBLE

    DOUBLE

    DECIMAL

    DECIMAL

  • Contoh

    • Contoh 1: Hitung nilai median gaji (sal) semua karyawan. Pernyataan contoh:

      select median(sal) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | 1600.0     |
      +------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan menghitung gaji median (sal) untuk setiap departemen. Perintah contoh:

      select deptno, median(sal) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | 2450.0     |
      | 20         | 2975.0     |
      | 30         | 1375.0     |
      +------------+------------+

MIN

  • Sintaksis

    min(<colname>)
  • Deskripsi perintah.

    Menghitung nilai minimum.

  • Parameter

    colname: wajib. Nama kolom, yang dapat bertipe data apa pun selain BOOLEAN.

  • Nilai kembali

    Nilai kembali bertipe sama dengan colname. Aturan berikut berlaku:

    • Jika nilai colname adalah NULL, baris tersebut dikecualikan dari perhitungan.

    • Jika colname bertipe BOOLEAN, tidak dapat digunakan dalam perhitungan.

  • Contoh

    • Contoh 1: Hitung gaji terendah (sal) semua karyawan. Pernyataan contoh:

      select min(sal) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | 800        |
      +------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan menghitung gaji terendah (sal) di setiap departemen. Perintah contoh:

      select deptno, min(sal) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | 1300       |
      | 20         | 800        |
      | 30         | 950        |
      +------------+------------+

MIN_BY

  • Sintaksis

    min_by(<valueToReturn>,<valueToMinimize>)
  • Deskripsi

    Catatan

    Fungsi MIN_BY menyediakan fitur yang sama dengan fungsi ARG_MIN. Namun, fungsi-fungsi ini berbeda dalam urutan parameter. Fungsi MIN_BY diperkenalkan dalam MaxCompute untuk menjaga kompatibilitas dengan sintaksis open source.

    Menemukan baris tempat nilai minimum valueToMinimize berada dan mengembalikan nilai valueToReturn dalam baris tersebut. Fungsi ini merupakan fungsi tambahan MaxCompute V2.0.

  • Deskripsi Parameter

    • valueToMinimize: wajib. Nilai tipe data apa pun.

    • valueToReturn: wajib. Nilai tipe data apa pun.

  • Deskripsi nilai kembalian.

    Tipe data nilai kembali sama dengan tipe data parameter valueToReturn. Jika beberapa baris berisi nilai terkecil dari valueToMinimize, nilai valueToReturn dari salah satu baris tersebut dikembalikan secara acak. Jika nilai valueToMinimize adalah null, baris yang berisi nilai ini tidak digunakan untuk perhitungan.

  • Contoh

    • Contoh 1: Mengembalikan nama karyawan dengan gaji terendah. Pernyataan contoh:

       select min_by(ename,sal) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | SMITH      |
      +------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan mengembalikan nama karyawan dengan gaji terendah dalam setiap kelompok. Perintah contoh:

      select deptno, min_by(ename,sal) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | MILLER     |
      | 20         | SMITH      |
      | 30         | JAMES      |
      +------------+------------+

MULTIMAP_AGG

  • Deklarasi Fungsi

    map<K, array<V>> multimap_agg(K a, V b);
  • Deskripsi

    Mengembalikan map yang dibuat menggunakan a dan b. a adalah kunci dalam map. b digunakan untuk membuat array, yang digunakan sebagai nilai kunci dalam map. Jika kunci dalam map adalah null, kunci tersebut diabaikan.

  • Parameter

    • a: bidang input yang digunakan sebagai kunci dalam map.

    • b: bidang input yang digunakan sebagai nilai dalam map. Bidang yang sesuai dengan kunci yang sama ditempatkan dalam array yang sama dan digunakan sebagai nilai dalam map.

  • Deskripsi nilai kembalian.

    Map baru dikembalikan.

  • Contoh

    select multimap_agg(a, b) from
            values (1L, 'apple'), (2L, 'hi'), (null, 'good'), (1L, 'pie') t(a, b);

    Hasil berikut dikembalikan:

    +----------------------------------+
    | _c0                              |
    +----------------------------------+
    | {"2":["hi"],"1":["apple","pie"]} |
    +----------------------------------+

NUMERIC_HISTOGRAM

  • Sintaksis

    map<double key, double value> numeric_histogram(bigint <buckets>,
                                                    double <colname>
                                                    [, double <weight>])
                        
  • Deskripsi

    Mengembalikan histogram perkiraan berdasarkan kolom tertentu. Fungsi ini merupakan fungsi tambahan MaxCompute V2.0.

  • Deskripsi Parameter

    • buckets: wajib. Nilai bertipe BIGINT. Parameter ini menentukan jumlah maksimum bucket dalam kolom tempat histogram perkiraan dikembalikan.

    • colname: wajib. Nilai bertipe DOUBLE. Parameter ini menentukan kolom tempat histogram perkiraan perlu dihitung.

    • weight: opsional. Nilai bobot data di setiap baris. Nilai bertipe DOUBLE.

  • Deskripsi nilai kembalian.

    Mengembalikan nilai bertipe map<double key, double value>. Dalam nilai kembali, kunci merepresentasikan koordinat sumbu-x histogram perkiraan, dan nilai merepresentasikan ketinggian perkiraan pada sumbu-y. Aturan berikut berlaku:

    • Jika nilai buckets adalah null, null dikembalikan.

    • Jika nilai colname adalah null, baris yang berisi nilai ini tidak digunakan untuk perhitungan.

  • Contoh

    • Kembalikan histogram perkiraan dari kolom sal. Pernyataan contoh:

      select numeric_histogram(5, sal) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | {"1328.5714285714287":7.0,"2450.0":2.0,"5000.0":2.0,"875.0":2.0,"2956.25":4.0} |
      +------------+
    • Hitung histogram perkiraan untuk kolom gaji (sal), tempat deptno di setiap baris merepresentasikan bobot departemen. Perintah contoh:

      select numeric_histogram(5, sal, deptno) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | {"2944.4444444444443":90.0,"2450.0":20.0,"5000.0":20.0,"890.0":50.0,"1350.0":160.0} |
      +------------+

PERCENTILE

  • Sintaksis

    double percentile(bigint <colname>, <p>)
    -- Mengembalikan beberapa persentil eksak sebagai array.
    array percentile(bigint <colname>, array(<p1> [, <p2>...]))
  • Deskripsi

    Menghitung persentil eksak. Fungsi ini cocok untuk volume data kecil. Fungsi ini pertama-tama mengurutkan kolom yang ditentukan secara ascending lalu mengambil persentil eksak ke-p. p harus berada di antara 0 dan 1. Perhitungan percentile dimulai dari indeks 0. Misalnya, jika kolom berisi nilai 100, 200, dan 300, indeksnya adalah 0, 1, dan 2. Untuk menghitung persentil 0,3, hasil percentile adalah 2 × 0,3 = 0,6. Artinya nilai berada di antara indeks 0 dan 1. Hasilnya adalah 100 + (200 - 100) × 0,6 = 160. Fungsi ini merupakan fungsi ekstensi MaxCompute V2.0.

  • Deskripsi

    • colname: wajib. Kolom bertipe BIGINT.

    • p: Wajib. Persentil eksak, yang harus berada dalam rentang [0.0, 1.0].

  • Deskripsi nilai kembali.

    Nilai bertipe DOUBLE atau ARRAY dikembalikan.

  • Contoh

    • Contoh 1: Perintah berikut menghitung persentil 0,3 dari gaji (sal):

      select percentile(sal, 0.3) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | 1290.0     |
      +------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan menghitung persentil 0,3 dari gaji (sal) untuk setiap kelompok. Perintah contoh:

      select deptno, percentile(sal, 0.3) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | 1875.0     |
      | 20         | 1475.0     |
      | 30         | 1250.0     |
      +------------+------------+
    • Contoh 3: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan menghitung persentil 0,3, 0,5, dan 0,8 dari gaji (sal) untuk setiap kelompok. Perintah contoh:

      set odps.sql.type.system.odps2=true;
      select deptno, percentile(sal, array(0.3, 0.5, 0.8)) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | [1875.0,2450.0,5000.0] |
      | 20         | [1475.0,2975.0,3000.0] |
      | 30         | [1250.0,1375.0,1600.0] |
      +------------+------------+

PERCENTILE_APPROX

  • Sintaksis

    double percentile_approx (double <colname>[, double <weight>], <p> [, <B>]))
    -- Mengembalikan beberapa persentil perkiraan sebagai array.
    array<double> percentile_approx (double <colname>
                                     [, double <weight>],
                                     array(<p1> [, <p2>...])
                                     [, <B>])
  • Deskripsi

    Ini adalah fungsi ekstensi untuk MaxCompute V2.0. Perhitungan percentile_approx berbasis indeks 1. Untuk menghitung persentil ke-p untuk kolom dengan n entri data, fungsi percentile_approx pertama-tama mengurutkan kolom secara ascending. Data kolom yang diurutkan diperlakukan sebagai array bernama arr, dan hasil percentile_approx adalah res. Indeks untuk persentil dihitung sebagai index = n * p.

    • Jika index <= 1, maka res = arr[0].

    • Jika index >= n - 1, maka res = arr[n-1].

    • Jika 1 < index < n - 1, hitung diff = index + 0.5 - ceil(index):

      Jika kondisi abs(diff) < 0.5 terpenuhi, res dihitung berdasarkan rumus berikut: res = arr[ceil(index) - 1].

      Jika kondisi abs(diff) = 0.5 terpenuhi, res dihitung berdasarkan rumus berikut: res = arr[index - 1] + (arr[index] - arr[index - 1]) × 0.5.

      Nilai abs(diff) tidak dapat lebih besar dari 0.5.

    Sebagai contoh, jika kolom col berisi nilai 100, 200, 300, dan 400, indeksnya adalah 1, 2, 3, dan 4. Maka:

    • percentile_approx(col, 0.25) = 100 (indeks = 1).

    • percentile_approx(col, 0.5) = 200 + (300 - 200) * 0.5 = 250 (indeks = 2).

    • percentile_approx(col, 0.75) = 400 (indeks = 3).

    Catatan

    percentile_approx dan percentile berbeda dalam hal berikut:

    • Akurasi

      percentile_approx mengembalikan hasil perkiraan; percentile mengembalikan hasil eksak.

    • Memori

      Untuk volume data besar, percentile mungkin gagal karena batasan memori; percentile_approx tidak memiliki masalah ini.

    • Algoritma

      percentile_approx diimplementasikan konsisten dengan fungsi Hive dengan nama yang sama, tetapi menggunakan algoritma yang berbeda dari percentile. Akibatnya, untuk volume data yang sangat kecil, kedua fungsi mungkin mengembalikan hasil yang berbeda.

  • Deskripsi

    • colname: wajib. Nama kolom, yang dapat bertipe DOUBLE.

    • weight: opsional. Nilai bobot data di setiap baris. Nilai bertipe DOUBLE.

    • p: Wajib. Persentil perkiraan, yang harus berada dalam rentang [0.0, 1.0].

    • B: akurasi nilai kembali. Akurasi yang lebih tinggi menunjukkan nilai yang lebih akurat. Jika Anda tidak menentukan parameter ini, nilai 10000 digunakan.

  • Nilai kembali

    Nilai bertipe DOUBLE atau ARRAY dikembalikan. Nilai kembali bervariasi berdasarkan aturan berikut:

    • Jika nilai colname adalah null, baris yang berisi nilai ini tidak digunakan untuk perhitungan.

    • Jika nilai p atau B adalah null, kesalahan dikembalikan.

  • Contoh

    • Contoh 1: Perintah berikut menghitung persentil 0,3 dari gaji (sal):

      select percentile_approx(sal, 0.3) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | 1252.5     |
      +------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan menghitung persentil 0,3 dari gaji (sal) untuk setiap kelompok. Perintah contoh:

      select deptno, percentile_approx(sal, 0.3) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | 1300.0     |
      | 20         | 950.0      |
      | 30         | 1070.0     |
      +------------+------------+
    • Contoh 3: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan menghitung persentil 0,3, 0,5, dan 0,8 dari gaji (sal) untuk setiap kelompok. Perintah contoh:

      set odps.sql.type.system.odps2=true;
      select deptno, percentile_approx(sal, array(0.3, 0.5, 0.8), 1000) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | [1300.0,1875.0,3470.000000000001] |
      | 20         | [950.0,2037.5,2987.5] |
      | 30         | [1070.0,1250.0,1580.0] |
      +------------+------------+
    • Contoh 4 (dengan bobot): Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan menghitung persentil 0,3, 0,5, dan 0,8 dari gaji (sal) untuk setiap kelompok. Kolom cnt dalam tabel emp merepresentasikan jumlah orang dengan gaji tersebut. Perintah contoh:

      select deptno, percentile_approx(sal, deptno, array(0.3, 0.5, 0.8), 1000)
        from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | [1300.0,1875.0,3470.0] |
      | 20         | [950.0,2037.5,2987.5] |
      | 30         | [1070.0,1250.0,1580.0] |
      +------------+------------+

PERCENTILE_CONT

  • Sintaksis

    -- Hitung persentil eksak
    PERCENTILE_CONT(<col_name>, DOUBLE <percentile>[, BOOLEAN <isIgnoreNull>])
    
    -- Hitung persentil eksak dalam window
    PERCENTILE_CONT(<col_name>, DOUBLE <percentile>[, BOOLEAN <isIgnoreNull>]) OVER ([partition_clause] [orderby_clause])
  • Deskripsi

    Menghitung persentil eksak. Fungsi ini menggunakan algoritma interpolasi linear, mengurutkan kolom yang ditentukan secara ascending, dan mengembalikan nilai eksak pada persentil yang ditentukan.

  • Parameter

    • col_name: Wajib. Kolom bertipe DOUBLE atau DECIMAL.

    • percentile: Wajib. Persentil yang akan dihitung. Konstanta DOUBLE dalam rentang [0, 1].

    • isIgnoreNull: Opsional. Menentukan apakah nilai NULL diabaikan. Konstanta BOOLEAN. Nilai default adalah TRUE. Jika diatur ke FALSE, nilai NULL diperlakukan sebagai nilai minimum selama pengurutan.

    • partition_clause dan orderby_clause: Untuk informasi lebih lanjut, lihat windowing_definition.

  • Nilai kembali

    Mengembalikan nilai persentil yang dihitung sebagai DOUBLE.

  • Contoh

    • Contoh 1: Abaikan nilai NULL dan hitung persentil eksak dalam window.

      SELECT
        PERCENTILE_CONT(x, 0) OVER() AS min,
        PERCENTILE_CONT(x, 0.01) OVER() AS percentile1,
        PERCENTILE_CONT(x, 0.5) OVER() AS median,
        PERCENTILE_CONT(x, 0.9) OVER() AS percentile90,
        PERCENTILE_CONT(x, 1) OVER() AS max
      FROM VALUES(0D),(3D),(NULL),(1D),(2D) AS tbl(x) LIMIT 1;
      
      -- Hasil kembali
      +------------+-------------+------------+--------------+------------+
      | min        | percentile1 | median     | percentile90 | max        | 
      +------------+-------------+------------+--------------+------------+
      | 0.0        | 0.03        | 1.5        | 2.7          | 3.0        | 
      +------------+-------------+------------+--------------+------------+
    • Contoh 2: Jangan abaikan nilai NULL. Nilai NULL diperlakukan sebagai nilai minimum selama pengurutan. Hitung persentil eksak dalam window.

      SELECT
        PERCENTILE_CONT(x, 0, false) OVER() AS min,
        PERCENTILE_CONT(x, 0.01, false) OVER() AS percentile1,
        PERCENTILE_CONT(x, 0.5, false) OVER() AS median,
        PERCENTILE_CONT(x, 0.9, false) OVER() AS percentile90,
        PERCENTILE_CONT(x, 1, false) OVER() AS max
      FROM VALUES(0D),(3D),(NULL),(1D),(2D) AS tbl(x) LIMIT 1;
      
      -- Hasil kembali
      +------------+-------------+------------+--------------+------------+
      | min        | percentile1 | median     | percentile90 | max        | 
      +------------+-------------+------------+--------------+------------+
      | NULL       | 0.0         | 1.0        | 2.6          | 3.0        | 
      +------------+-------------+------------+--------------+------------+

PERCENTILE_DISC

  • Sintaksis

    -- Hitung nilai persentil tertentu
    PERCENTILE_DISC(<col_name>, DOUBLE <percentile>[, BOOLEAN <isIgnoreNull>])
    
    -- Hitung nilai persentil dalam window
    PERCENTILE_DISC(<col_name>, DOUBLE <percentile>[, BOOLEAN <isIgnoreNull>]) OVER ([partition_clause] [orderby_clause])
  • Deskripsi

    Menghitung nilai persentil tertentu. Fungsi ini pertama-tama mengurutkan kolom yang ditentukan secara ascending lalu mengembalikan nilai pertama yang distribusi kumulatifnya lebih besar dari atau sama dengan persentil yang ditentukan.

  • Parameter

    • col_name: Wajib. Kolom dengan tipe data yang dapat diurutkan.

    • percentile: Wajib. Persentil yang akan dihitung. Konstanta DOUBLE dalam rentang [0, 1].

    • isIgnoreNull: Opsional. Menentukan apakah nilai NULL diabaikan. Konstanta BOOLEAN. Nilai default adalah TRUE. Jika diatur ke FALSE, nilai NULL diperlakukan sebagai nilai minimum selama pengurutan.

    • partition_clause dan orderby_clause: Untuk informasi lebih lanjut, lihat windowing_definition.

  • Nilai kembali

    Mengembalikan nilai persentil yang dihitung. Tipe data sama dengan kolom input col_name.

  • Contoh

    • Contoh 1: Abaikan nilai NULL dan hitung nilai persentil dalam window.

      SELECT
        x,
        PERCENTILE_DISC(x, 0) OVER() AS min,
        PERCENTILE_DISC(x, 0.5) OVER() AS median,
        PERCENTILE_DISC(x, 1) OVER() AS max
      FROM VALUES('c'),(NULL),('b'),('a') AS tbl(x);
      
      -- Hasil kembali
      +------------+------------+------------+------------+
      | x          | min        | median     | max        | 
      +------------+------------+------------+------------+
      | c          | a          | b          | c          | 
      | NULL       | a          | b          | c          | 
      | b          | a          | b          | c          | 
      | a          | a          | b          | c          | 
      +------------+------------+------------+------------+
    • Contoh 2: Jangan abaikan nilai NULL. Nilai NULL diperlakukan sebagai nilai minimum selama pengurutan. Hitung nilai persentil dalam window.

      SELECT
        x,
        PERCENTILE_DISC(x, 0, false) OVER() AS min,
        PERCENTILE_DISC(x, 0.5, false) OVER() AS median,
        PERCENTILE_DISC(x, 1, false) OVER() AS max
      FROM VALUES('c'),(NULL),('b'),('a') AS tbl(x);
      
      -- Hasil kembali
      +------------+------------+------------+------------+
      | x          | min        | median     | max        | 
      +------------+------------+------------+------------+
      | c          | NULL       | a          | c          | 
      | NULL       | NULL       | a          | c          | 
      | b          | NULL       | a          | c          | 
      | a          | NULL       | a          | c          | 
      +------------+------------+------------+------------+

STDDEV

  • Sintaksis

    double stddev(double <colname>)
    decimal stddev(decimal <colname>)
  • Deskripsi

    Mengembalikan simpangan baku populasi dari semua nilai input.

  • Parameter

    colname: wajib. Nama kolom, yang dapat bertipe DOUBLE atau DECIMAL. Jika nilai input bertipe STRING atau BIGINT, nilai tersebut dikonversi secara implisit ke tipe DOUBLE sebelum perhitungan.

  • Nilai kembali

    Jika nilai colname adalah null, baris yang berisi nilai ini tidak digunakan untuk perhitungan. Tabel berikut menjelaskan pemetaan antara tipe data input dan nilai kembali.

    Tipe input

    Tipe nilai kembali

    TINYINT

    DOUBLE

    SMALLINT

    DOUBLE

    INT

    DOUBLE

    BIGINT

    DOUBLE

    FLOAT

    DOUBLE

    DOUBLE

    DOUBLE

    DECIMAL

    DECIMAL

  • Contoh

    • Contoh 1: Hitung simpangan baku populasi dari nilai gaji (sal) semua karyawan. Pernyataan contoh:

      select stddev(sal) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | 1262.7549932628976 |
      +------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan menghitung simpangan baku populasi dari gaji (sal) untuk setiap departemen. Perintah contoh:

      select deptno, stddev(sal) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | 1546.1421524412158 |
      | 20         | 1004.7387720198718 |
      | 30         | 610.1001739241043 |
      +------------+------------+

STDDEV_SAMP

  • Sintaksis

    double stddev_samp(double <colname>)
    decimal stddev_samp(decimal <colname>)
  • Deskripsi

    Mengembalikan simpangan baku sampel dari semua nilai input.

  • Parameter

    colname: wajib. Nama kolom, yang dapat bertipe DOUBLE atau DECIMAL. Jika nilai input bertipe STRING atau BIGINT, nilai tersebut dikonversi secara implisit ke tipe DOUBLE sebelum perhitungan.

  • Nilai kembali

    Jika nilai colname adalah null, baris yang berisi nilai ini tidak digunakan untuk perhitungan. Tabel berikut menjelaskan pemetaan antara tipe data input dan nilai kembali.

    Tipe input

    Tipe nilai kembali

    TINYINT

    DOUBLE

    SMALLINT

    DOUBLE

    INT

    DOUBLE

    BIGINT

    DOUBLE

    FLOAT

    DOUBLE

    DOUBLE

    DOUBLE

    DECIMAL

    DECIMAL

  • Contoh

    • Contoh 1: Hitung simpangan baku sampel dari nilai gaji (sal) semua karyawan. Pernyataan contoh:

      select stddev_samp(sal) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | 1301.6180541247609 |
      +------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan menghitung simpangan baku sampel dari gaji (sal) untuk setiap departemen. Perintah contoh:

      select deptno, stddev_samp(sal) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | 1693.7138680032901 |
      | 20         | 1123.3320969330487 |
      | 30         | 668.3312551921141 |
      +------------+------------+

SUM

  • Sintaksis

    DECIMAL|DOUBLE|BIGINT  sum(<colname>)
  • Deskripsi

    Hitung ringkasan.

  • Parameter

    colname: wajib. Nilai kolom mendukung semua tipe data dan dapat dikonversi ke tipe DOUBLE sebelum perhitungan. Nama kolom, yang dapat bertipe DOUBLE, DECIMAL, atau BIGINT. Jika nilai input bertipe STRING, nilai tersebut dikonversi secara implisit ke tipe DOUBLE sebelum perhitungan.

  • Nilai kembali

    Jika nilai colname adalah null, baris yang berisi nilai ini tidak digunakan untuk perhitungan. Tabel berikut menjelaskan pemetaan antara tipe data input dan nilai kembali.

    Tipe input

    Tipe nilai kembali

    TINYINT

    BIGINT

    SMALLINT

    BIGINT

    INT

    BIGINT

    BIGINT

    BIGINT

    FLOAT

    DOUBLE

    DOUBLE

    DOUBLE

    DECIMAL

    DECIMAL

  • Contoh

    • Contoh 1: Hitung jumlah nilai gaji (sal) semua karyawan. Pernyataan contoh:

      select sum(sal) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | 37775      |
      +------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan menghitung jumlah gaji (sal) untuk setiap departemen. Perintah contoh:

      select deptno, sum(sal) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | 17500      |
      | 20         | 10875      |
      | 30         | 9400       |
      +------------+------------+

VAR_SAMP

  • Sintaksis

    double var_samp(<colname>)
  • Deskripsi

    Menghitung varians sampel dari kolom numerik tertentu. Fungsi ini merupakan fungsi tambahan MaxCompute V2.0.

  • Parameter

    colname: wajib. Kolom bertipe data numerik. Jika kolom yang ditentukan bukan kolom numerik, nilai null dikembalikan.

  • Nilai kembali

    Nilai bertipe DOUBLE dikembalikan.

  • Contoh

    • Contoh 1: Hitung varians sampel dari nilai gaji (sal) semua karyawan. Pernyataan contoh:

      select var_samp(sal) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | 1694209.5588235292 |
      +------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan menghitung varians gaji (sal) untuk setiap kelompok. Perintah contoh:

      select deptno, var_samp(sal) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | 2868666.666666667 |
      | 20         | 1261875.0  |
      | 30         | 446666.6666666667 |
      +------------+------------+

VARIANCE/VAR_POP

  • Sintaksis

    double variance(<colname>)
    double var_pop(<colname>)
  • Topik ini menjelaskan perintah tersebut.

    Menghitung varians dari kolom numerik tertentu.

  • Deskripsi Metrik

    colname: wajib. Kolom bertipe data numerik. Jika kolom yang ditentukan bukan kolom numerik, nilai null dikembalikan. Fungsi ini merupakan fungsi tambahan MaxCompute V2.0.

  • Nilai kembali

    Nilai bertipe DOUBLE dikembalikan.

  • Contoh

    • Contoh 1: Hitung varians dari nilai gaji (sal) semua karyawan. Pernyataan contoh:

      select variance(sal) from emp;
      -- Ini setara dengan pernyataan berikut.
      select var_pop(sal) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | 1594550.1730103805 |
      +------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan menghitung varians gaji (sal) untuk setiap kelompok. Perintah contoh:

      select deptno, variance(sal) from emp group by deptno;
      -- Ini setara dengan pernyataan berikut.
      select deptno, var_pop(sal) from emp group by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | 2390555.5555555555 |
      | 20         | 1009500.0  |
      | 30         | 372222.22222222225 |
      +------------+------------+

WM_CONCAT

  • Sintaksis

    string wm_concat(string <separator>, string <colname>)
  • Deskripsi perintah.

    Menggabungkan nilai-nilai dalam colname menggunakan delimiter yang ditentukan oleh separator.

  • Deskripsi.

    • separator: wajib. Delimiter, yang merupakan konstanta bertipe STRING.

    • colname: wajib. Nilai bertipe STRING. Jika nilai input bertipe BIGINT, DOUBLE, atau DATETIME, nilai tersebut dikonversi secara implisit ke tipe STRING sebelum perhitungan.

  • Nilai kembali (ketika menggunakan group by untuk pengelompokan, nilai kembali dalam kelompok tidak diurutkan)

    Nilai bertipe STRING dikembalikan. Nilai kembali bervariasi berdasarkan aturan berikut:

    • Jika nilai separator bukan konstanta bertipe STRING, kesalahan dikembalikan.

    • Jika nilai colname bukan bertipe STRING, BIGINT, DOUBLE, atau DATETIME, kesalahan dikembalikan.

    • Jika nilai colname adalah null, baris yang berisi nilai ini tidak digunakan untuk perhitungan.

    Catatan

    Dalam pernyataan select wm_concat(',', name) from table_name;, jika table_name adalah himpunan kosong, pernyataan tersebut mengembalikan NULL.

  • Contoh

    • Contoh 1: Gabungkan nama (ename) semua karyawan. Pernyataan contoh:

      select wm_concat(',', ename) from emp;

      Hasil berikut dikembalikan:

      +------------+
      | _c0        |
      +------------+
      | SMITH,ALLEN,WARD,JONES,MARTIN,BLAKE,CLARK,SCOTT,KING,TURNER,ADAMS,JAMES,FORD,MILLER,JACCKA,WELAN,TEBAGE |
      +------------+
    • Contoh 2: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan menggabungkan nama (ename) karyawan dalam kelompok yang sama. Perintah contoh:

      select deptno, wm_concat(',', ename) from emp group by deptno order by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | CLARK,KING,MILLER,JACCKA,WELAN,TEBAGE |
      | 20         | SMITH,JONES,SCOTT,ADAMS,FORD |
      | 30         | ALLEN,WARD,MARTIN,BLAKE,TURNER,JAMES |
      +------------+------------+
    • Contoh 3: Gunakan fungsi ini dengan group by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan menggabungkan nilai gaji (sal) unik karyawan dalam kelompok yang sama. Perintah contoh:

      select deptno, wm_concat(distinct ',', sal) from emp group by deptno order by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      | deptno     | _c1        |
      +------------+------------+
      | 10         | 1300,2450,5000 |
      | 20         | 1100,2975,3000,800 |
      | 30         | 1250,1500,1600,2850,950 |
      +------------+------------+
    • Contoh 4: Gunakan fungsi ini dengan group by dan order by untuk mengelompokkan semua karyawan berdasarkan departemen (deptno), mengurutkan gaji mereka (sal), dan menggabungkannya. Perintah contoh:

      select deptno, wm_concat(',',sal) within group(order by sal) from emp group by deptno order by deptno;

      Hasil berikut dikembalikan:

      +------------+------------+
      |deptno|_c1|
      +------------+------------+
      |10|1300,1300,2450,2450,5000,5000|
      |20|800,1100,2975,3000,3000|
      |30|950,1250,1250,1500,1600,2850|
      +------------+------------+