Menggabungkan nilai dalam colname menggunakan pembatas yang ditentukan oleh separator.
Catatan penggunaan
MaxCompute V2.0 menyediakan fungsi tambahan. Jika fungsi yang digunakan melibatkan tipe data baru seperti TINYINT, SMALLINT, INT, FLOAT, VARCHAR, TIMESTAMP, dan BINARY, Anda harus mengeksekusi pernyataan untuk mengaktifkan edisi tipe data MaxCompute V2.0:
Tingkat sesi: Tambahkan
set odps.sql.type.system.odps2=true;sebelum pernyataan SQL yang ingin dieksekusi, lalu kirimkan dan eksekusi bersama.Tingkat proyek: Pemilik Proyek dapat mengaktifkan edisi tipe data MaxCompute V2.0 untuk proyek berdasarkan kebutuhan proyek. Pernyataan:
setproject odps.sql.type.system.odps2=true;Konfigurasi akan berlaku setelah 10 hingga 15 menit.
Untuk informasi lebih lanjut tentang
setproject, lihat Operasi Proyek. Untuk informasi lebih lanjut tentang tindakan pencegahan saat mengaktifkan edisi tipe data MaxCompute V2.0 di tingkat proyek, lihat Edisi Tipe Data.
Jika Anda menggunakan pernyataan SQL yang mencakup beberapa fungsi agregat dan sumber daya proyek tidak mencukupi, mungkin terjadi kelebihan memori. Kami sarankan Anda mengoptimalkan pernyataan SQL atau membeli sumber daya komputasi sesuai kebutuhan bisnis Anda.
Sintaksis
string wm_concat(string <separator>, string <colname>)Parameter
separator: Wajib. Pembatas berupa konstanta bertipe STRING.
colname: Wajib. Nilai bertipe STRING. Jika nilai input bertipe BIGINT, DOUBLE, atau DATETIME, maka akan dikonversi secara implisit menjadi tipe STRING sebelum perhitungan.
Jika fungsi WM_CONCAT digunakan bersama dengan ekspresi within group (order by <col1>[,<col2>…]) dan kata kunci DISTINCT, perhatikan sintaksis fungsi. Untuk informasi lebih lanjut tentang sintaksis fungsi agregat, lihat Sintaksis.
Nilai kembali
Fungsi ini digunakan bersama dengan klausa GROUP BY. Klausa ORDER BY tidak ditentukan.
Nilai bertipe STRING dikembalikan. Nilai kembali bervariasi berdasarkan aturan berikut:
Jika nilai dari separator bukan konstanta bertipe STRING, kesalahan akan dikembalikan.
Jika nilai dari colname bukan bertipe STRING, BIGINT, DOUBLE, atau DATETIME, kesalahan akan dikembalikan.
Jika nilai dari colname adalah null, baris yang berisi nilai tersebut tidak digunakan dalam perhitungan.
Jika table_name dalam pernyataan select wm_concat(',', name) from table_name; adalah himpunan kosong, null akan dikembalikan.
Data sampel
Berikut adalah data sampel dan contoh untuk membantu Anda memahami cara menggunakan fungsi-fungsi ini. Buat tabel bernama emp dan masukkan data sampel ke dalam tabel. Contoh pernyataan:
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; -- Ganti emp.txt dengan path sebenarnya (path dan nama) tempat Anda mengunggah file data.File emp.txt berisi data sampel 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,,10Contoh
Contoh 1: Menggabungkan nilai dalam kolom ename semua karyawan. Contoh pernyataan:
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 di setiap departemen. Contoh pernyataan: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 karyawan di setiap departemen setelah duplikat dihapus. Contoh pernyataan: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), menggabungkan nilai gaji (sal) semua karyawan di setiap departemen, dan mengurutkan nilai gaji (sal) dalam urutan tertentu. Contoh pernyataan: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| +------------+------------+Contoh 5: Gunakan fungsi ini dengan
GROUP BYdanORDER BYuntuk mengurutkan kolom tertentu dalam urutan tertentu. Contoh pernyataan:SELECT g, wm_concat ('#', t) WITHIN GROUP (ORDER BY h DESC) AS t_t FROM VALUES ("24",1,10), ("234",2,100), ("555",1,20), ("123", 2,30), ("7",1,11), ("13",3,50) AS tmp (t,g,h) GROUP BY g;Hasil berikut dikembalikan:
+------+-----+ | g | t_t | +------+-----+ | 1 | 555#7#24 | | 2 | 234#123 | | 3 | 13 | +------+-----+
Fungsi terkait
WM_CONCAT adalah fungsi agregat. Untuk informasi lebih lanjut tentang fungsi yang digunakan untuk menghitung nilai rata-rata dari beberapa catatan input dan mengagregasi parameter, lihat Fungsi Agregat.