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 |
|
Memeriksa apakah setidaknya salah satu nilai input bernilai True. |
|
|
Mengembalikan nilai dari rentang yang ditentukan. |
|
|
Mengembalikan perkiraan jumlah nilai input unik dalam kolom tertentu. |
|
|
Mengembalikan nilai kolom dari baris yang sesuai dengan nilai maksimum dari kolom tertentu. |
|
|
Mengembalikan nilai kolom dari baris yang sesuai dengan nilai minimum dari kolom tertentu. |
|
|
Anda dapat menghitung nilai rata-rata. |
|
|
Mengagregasi nilai input berdasarkan operasi bitwise AND. |
|
|
Mengagregasi nilai input berdasarkan operasi bitwise OR. |
|
|
Mengagregasi nilai input berdasarkan operasi bitwise XOR. |
|
|
Menjalankan operasi logika AND pada sekumpulan nilai Boolean. |
|
|
Menjalankan operasi logika OR pada sekumpulan nilai Boolean. |
|
|
Mengagregasi kolom yang ditentukan ke dalam array. |
|
|
Mengagregasi nilai unik dari kolom tertentu ke dalam array. |
|
|
Menghitung Koefisien Korelasi Pearson dari dua kolom. |
|
|
Menghitung jumlah catatan. |
|
|
Mengembalikan jumlah catatan yang nilai expr-nya bernilai True. |
|
|
Menghitung kovarians populasi dari dua kolom numerik yang ditentukan. |
|
|
Menghitung kovarians sampel dari dua kolom numerik yang ditentukan. |
|
|
Mengembalikan map yang berisi jumlah kemunculan setiap nilai input. |
|
|
Anda dapat membuat Map dari dua bidang input. |
|
|
Mengembalikan map baru yang merupakan gabungan dari semua map input. |
|
|
Mengembalikan map baru yang merupakan gabungan dari semua map input. Map output menjumlahkan nilai-nilai dari kunci yang cocok di semua map input. |
|
|
Anda dapat menghitung nilai maksimum. |
|
|
Mengembalikan nilai kolom dari baris yang sesuai dengan nilai maksimum dari kolom tertentu. |
|
|
Anda dapat menghitung median. |
|
|
Menghitung nilai minimum. |
|
|
Mengembalikan nilai kolom dari baris yang sesuai dengan nilai minimum dari kolom tertentu. |
|
|
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. |
|
|
Mengembalikan histogram perkiraan berdasarkan kolom tertentu. |
|
|
Menghitung persentil eksak. Fungsi ini cocok untuk skenario di mana jumlah data yang dihitung kecil. |
|
|
Mengembalikan persentil perkiraan. Fungsi ini berlaku untuk skenario di mana jumlah data yang dihitung besar. |
|
|
Menghitung persentil eksak. |
|
|
Menghitung nilai persentil tertentu. |
|
|
Mengembalikan simpangan baku populasi dari semua nilai input. |
|
|
Mengembalikan simpangan baku sampel dari semua nilai input. |
|
|
Mengembalikan jumlah dari suatu kolom. |
|
|
Menghitung varians sampel dari kolom numerik tertentu. |
|
|
Menghitung varians dari kolom numerik tertentu. |
|
|
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 ekspresiWITHIN 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>…]), klausaORDER 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 klausaORDER BYharus merupakan subset dari kolom DISTINCT. Selain itu, tipe data bidang dalam<col1>[,<col2>…]harus sesuai dengan tipe data parameter input fungsi agregat.CatatanFungsi 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, klausaORDER BYhanya 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 BYjuga 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 byuntuk 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 byuntuk 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 byuntuk 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 byuntuk 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 byuntuk 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 byuntuk 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 byuntuk 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 byuntuk 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 |
| Tidak | Mengontrol penanganan duplikat. |
| Ya | Kolom yang akan dihitung. Menerima tipe data apa pun. Gunakan |
| Ya | Ekspresi tipe data apa pun. Baris NULL dikecualikan. Dengan |
| 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.
-
Unduh data uji test_data.txt.
-
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 ); -
Muat data.
Ganti
FILE_PATHdengan 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 byuntuk 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 byuntuk 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.
CatatanNilai 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.
CatatanNilai 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 byuntuk 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
CatatanFungsi 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 byuntuk 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 byuntuk 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 byuntuk 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
CatatanFungsi 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 byuntuk 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
deptnodi 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
percentiledimulai dari indeks 0. Misalnya, jika kolom berisi nilai 100, 200, dan 300, indeksnya adalah 0, 1, dan 2. Untuk menghitung persentil 0,3, hasilpercentileadalah 2 × 0,3 = 0,6. Artinya nilai berada di antara indeks 0 dan 1. Hasilnya adalah100 + (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 byuntuk 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 byuntuk 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_approxberbasis indeks 1. Untuk menghitung persentil ke-puntuk kolom dengannentri data, fungsipercentile_approxpertama-tama mengurutkan kolom secara ascending. Data kolom yang diurutkan diperlakukan sebagai array bernamaarr, dan hasilpercentile_approxadalahres. Indeks untuk persentil dihitung sebagaiindex = n * p.-
Jika
index <= 1, makares = arr[0]. -
Jika
index >= n - 1, makares = arr[n-1]. -
Jika
1 < index < n - 1, hitungdiff = 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
colberisi 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).
Catatanpercentile_approxdanpercentileberbeda 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 byuntuk 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 byuntuk 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 byuntuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan menghitung persentil 0,3, 0,5, dan 0,8 dari gaji (sal) untuk setiap kelompok. Kolomcntdalam tabelempmerepresentasikan 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 byuntuk 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 byuntuk 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 byuntuk 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 byuntuk 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 byuntuk 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 byuntuk 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.
CatatanDalam pernyataan
select wm_concat(',', name) from table_name;, jikatable_nameadalah 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 byuntuk 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 byuntuk 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 bydanorder byuntuk 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| +------------+------------+
-