Fungsi agregat menggabungkan beberapa record input menjadi satu nilai output. Anda dapat menggunakan fungsi agregat bersama 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 kolom tertentu. | |
Mengembalikan nilai kolom dari baris yang sesuai dengan nilai minimum 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 record. | |
Mengembalikan jumlah record 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 hasil menjumlahkan nilai-nilai dari kunci yang sama di semua map input. | |
Anda dapat menghitung nilai maksimum. | |
Mengembalikan nilai kolom dari baris yang sesuai dengan nilai maksimum kolom tertentu. | |
Anda dapat menghitung median. | |
Menghitung nilai minimum. | |
Mengembalikan nilai kolom dari baris yang sesuai dengan nilai minimum 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 dengan volume data kecil. | |
Mengembalikan persentil perkiraan. Fungsi ini berlaku untuk skenario dengan volume data besar. | |
Menghitung persentil eksak. | |
Menghitung nilai persentil tertentu. | |
Mengembalikan simpangan baku populasi dari semua nilai input. | |
Mengembalikan deviasi standar 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 secara bersamaan untuk dieksekusi.Pemilik Proyek dapat mengonfigurasi pengaturan di tingkat proyek sesuai kebutuhan. Perubahan akan berlaku dalam waktu 10 hingga 15 menit. Perintahnya sebagai berikut.
setproject odps.sql.type.system.odps2=true;Untuk informasi selengkapnya tentang
setproject, lihat Operasi proyek. Untuk informasi selengkapnya tentang pertimbangan saat mengaktifkan tipe data di 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, overflow memori dapat terjadi. Kami menyarankan Anda mengoptimalkan pernyataan SQL atau membeli sumber daya komputasi sesuai kebutuhan.
Sintaksis fungsi agregat
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 tersebut.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 selengkapnya, lihat Contoh 4 di bawah. Untuk detail pembuatan tabel emp yang digunakan dalam contoh, lihat Data sampel.
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, error 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 selengkapnya 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 memfilter dan mengagregasi 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
Untuk membantu Anda memahami cara menggunakan setiap fungsi, topik ini menyediakan data sumber dan contoh fungsi berdasarkan data tersebut. Perintah contoh berikut membuat tabel bernama emp dan menambahkan data ke dalamnya:
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,,10Ekspresi 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 selengkapnya tentang where_condition, lihat Klausa WHERE (where_condition).
Deskripsi nilai kembalian.
Untuk informasi selengkapnya, 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 yang berisi nilai valueToMaximize dan mengembalikan nilai valueToReturn pada 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 bertipe 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: Kembalikan 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 di 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 yang berisi nilai minimum valueToMinimize dan mengembalikan nilai valueToReturn pada baris tersebut. Fungsi ini merupakan fungsi tambahan MaxCompute V2.0.
Deskripsi
valueToMinimize: wajib. Nilai bertipe data apa pun.
valueToReturn: wajib. Nilai bertipe 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: Kembalikan 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 di 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 tipe 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 rata-rata gaji (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.
Bagian ini menjelaskan nilai kembalian.
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, error 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 pemfilteran. 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 pemfilteran. 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 yang ingin Anda hitung Koefisien Korelasi Pearson-nya. 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 record.
BIGINT COUNT([DISTINCT|ALL] <colname>)
-- Hitung jumlah record dalam window.
BIGINT COUNT(*) OVER ([partition_clause] [orderby_clause] [frame_clause])
BIGINT COUNT([DISTINCT] <expr>[,...]) OVER ([partition_clause] [orderby_clause] [frame_clause])Parameter
DISTINCT|ALL: Opsional. Menentukan apakah record duplikat dihapus sebelum penghitungan. Nilai default adalah ALL, yang menghitung semua record. Jika Anda menentukan DISTINCT, fungsi hanya menghitung record unik.
colname: Wajib. Kolom yang nilainya ingin Anda hitung. Parameter ini dapat bertipe data apa pun. Anda dapat menentukan
*untuk colname, seperti dalamCOUNT(*). Dalam kasus ini, fungsi mengembalikan jumlah total baris. Baris tempat nilai colname adalah NULL tidak termasuk dalam perhitungan.expr: Wajib. Ekspresi. Parameter ini dapat bertipe data apa pun. Baris tempat ekspresi mengevaluasi ke NULL tidak termasuk dalam perhitungan. Jika Anda menentukan kata kunci DISTINCT, fungsi mengembalikan jumlah nilai unik.
COUNT([DISTINCT] <expr>[,...]): Menghitung jumlah baris dalam window tertentu tempat nilai semua ekspresi yang ditentukan bukan NULL. Jika Anda menentukan kata kunciDISTINCT, fungsi menghitung baris setelah menghapus baris duplikat.partition_clause, orderby_clause, dan frame_clause: Untuk informasi selengkapnya, lihat windowing_definition.
Nilai kembali
Fungsi mengembalikan nilai BIGINT. Baris tempat colname adalah NULL tidak termasuk dalam perhitungan.
Contoh
Persiapkan 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: Tentukan kolom untuk window dan kembalikan jumlah kumulatif tanpa pengurutan
Contoh ini mempartisi window berdasarkan kolom gaji (sal). Data tidak diurutkan. Fungsi mengembalikan jumlah kumulatif semua baris dalam window saat ini. Window berisi semua baris yang memiliki nilai sal yang sama.
Perintah contoh
SELECT sal, COUNT(sal) OVER (PARTITION BY sal) AS count FROM emp;Hasil
+------------+------------+ | sal | count | +------------+------------+ | 800 | 1 | | 950 | 1 | | 1100 | 1 | | 1250 | 2 | -- Partisi berisi dua baris dengan sal 1250. Fungsi mengembalikan 2 untuk kedua baris. | 1250 | 2 | -- Jumlah juga 2 untuk baris kedua dalam partisi. | 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: Dalam mode non-Hive compatible, tentukan kolom untuk window dan kembalikan jumlah kumulatif setelah pengurutan
Dalam mode non-Hive compatible, contoh ini mempartisi window berdasarkan kolom gaji (sal) dan mengurutkan data. Fungsi mengembalikan jumlah kumulatif dari baris pertama hingga baris saat ini dalam window saat ini. Window berisi semua baris yang memiliki nilai sal yang sama.
Perintah contoh
-- 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;Nilai kembali
+------------+------------+ | sal | count | +------------+------------+ | 800 | 1 | | 950 | 1 | | 1100 | 1 | | 1250 | 1 | -- Partisi dimulai. Jumlah berjalan untuk baris pertama adalah 1. | 1250 | 2 | -- Jumlah berjalan untuk baris kedua adalah 2. | 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: Dalam mode Hive compatible, tentukan kolom untuk window dan kembalikan jumlah kumulatif setelah pengurutan
Dalam mode Hive compatible, contoh ini mempartisi window berdasarkan kolom gaji (sal) dan mengurutkan data. Fungsi mengembalikan jumlah kumulatif dari baris pertama hingga baris terakhir dalam window saat ini. Window berisi semua baris yang memiliki nilai sal yang sama.
Perintah contoh
-- 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 | -- Partisi berisi dua baris dengan sal 1250. Fungsi mengembalikan 2 untuk kedua baris. | 1250 | 2 | -- Jumlah juga 2 untuk baris kedua dalam partisi. | 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: Kembalikan jumlah total baris
Hitung jumlah total karyawan di semua departemen.
Perintah contoh
SELECT COUNT(*) FROM emp;Hasil
+------------+ | _c0 | +------------+ | 17 | +------------+
Contoh 5: Kelompokkan data dan hitung total untuk setiap kelompok
Contoh ini menggunakan fungsi COUNT dengan GROUP BY untuk mengelompokkan semua karyawan berdasarkan departemen (deptno) dan menghitung jumlah karyawan di setiap departemen.
Perintah contoh
SELECT deptno, COUNT(*) FROM emp GROUP BY deptno;Hasil
+------------+------------+ | deptno | _c1 | +------------+------------+ | 20 | 5 | | 30 | 6 | | 10 | 6 | +------------+------------+
Contoh 6: Hitung nilai unik
Contoh ini menggunakan DISTINCT untuk menghapus nilai duplikat dan menghitung jumlah departemen.
Perintah contoh
SELECT COUNT(DISTINCT deptno) FROM emp;Nilai kembali
+------------+ | _c0 | +------------+ | 3 | +------------+
COUNT_IF
Sintaksis
bigint count_if(boolean <expr>)Deskripsi
Mengembalikan jumlah record yang nilai expr-nya bernilai True.
Parameter
expr: wajib. Ekspresi BOOLEAN.
Nilai kembali
Nilai bertipe BIGINT dikembalikan. Jika nilai parameter expr adalah 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 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 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 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 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 tersebut. 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 nilai dipertahankan secara acak.
Deskripsi.
a: bidang input yang digunakan sebagai kunci dalam map.
b: bidang input yang digunakan sebagai nilai dalam map.
Deskripsi nilai kembalian.
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 sama 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 kolom.
Deskripsi parameter.
colname: wajib. Nama kolom, yang dapat bertipe data apa pun kecuali 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 parameternya. Fungsi MAX_BY diperkenalkan dalam MaxCompute untuk menjaga kompatibilitas dengan sintaksis open source.
Menemukan baris yang berisi nilai valueToMaximize dan mengembalikan nilai valueToReturn pada baris tersebut. Fungsi ini merupakan fungsi tambahan MaxCompute V2.0.
Deskripsi Parameter
valueToMaximize: wajib. Nilai bertipe data apa pun.
valueToReturn: wajib. Nilai bertipe 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: Kembalikan 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 di 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 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 tipe 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 median gaji (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 kecuali 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 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 parameternya. Fungsi MIN_BY diperkenalkan dalam MaxCompute untuk menjaga kompatibilitas dengan sintaksis open source.
Menemukan baris yang berisi nilai minimum valueToMinimize dan mengembalikan nilai valueToReturn pada baris tersebut. Fungsi ini merupakan fungsi tambahan MaxCompute V2.0.
Deskripsi Parameter
valueToMinimize: wajib. Nilai bertipe data apa pun.
valueToReturn: wajib. Nilai bertipe 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: Kembalikan 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 di 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 yang histogram perkiraannya dikembalikan.
colname: wajib. Nilai bertipe DOUBLE. Parameter ini menentukan kolom yang histogram perkiraannya 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 perkiraan tinggi 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 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), di mana
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>) -- Kembalikan 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 ke-p yang eksak. p harus berada di antara 0 dan 1. Perhitungan
percentiledimulai dari indeks 0. Sebagai contoh, 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 yang ditentukan, yang harus berada dalam rentang
[0.0, 1.0].
Deskripsi nilai kembalian.
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>])) -- Kembalikan 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(index = 1).percentile_approx(col, 0.5) = 200 + (300 - 200) * 0.5 = 250(index = 2).percentile_approx(col, 0.75) = 400(index = 3).
CatatanPerbedaan antara
percentile_approxdanpercentileadalah sebagai berikut:percentile_approxmenghitung persentil perkiraan, sedangkanpercentilemenghitung persentil eksak. Untuk volume data besar,percentilemungkin gagal karena batasan memori, tetapipercentile_approxtidak memiliki masalah ini.Implementasi percentile_approx konsisten dengan fungsi
percentile_approxdi Hive. Namun, algoritma perhitungannya berbeda daripercentile. Oleh karena itu, untuk beberapa skenario dengan volume data sangat kecil, hasilpercentile_approxmungkin berbeda dari hasilpercentile.
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.
Deskripsi nilai kembalian.
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, error 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 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 selengkapnya, lihat Fungsi window.
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 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 selengkapnya, lihat Fungsi window.
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 tipe 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 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 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 deviasi standar 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 tipe 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 deviasi standar sampel 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 deviasi standar sampel 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
Menghitung jumlah total.
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.
Bagian ini menjelaskan nilai kembalian.
Jika nilai colname adalah null, baris yang berisi nilai ini tidak digunakan untuk perhitungan. Tabel berikut menjelaskan pemetaan antara tipe data input dan tipe 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 total 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 total 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 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 sampel 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 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 (saat 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, error dikembalikan.
Jika nilai colname bukan bertipe STRING, BIGINT, DOUBLE, atau DATETIME, error 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| +------------+------------+