全部产品
Search
文档中心

MaxCompute:WM_CONCAT

更新时间:Jul 02, 2025

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.

Catatan

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.

Catatan

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,,10

Contoh

  • 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 BY untuk 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 BY untuk 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 BY dan ORDER BY untuk 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 BY dan ORDER BY untuk 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.