Gunakan MaxCompute SQL untuk menggabungkan nilai dari beberapa baris menjadi satu baris. Dua pola berikut mencakup sebagian besar kasus penggunaan:
String concatenation: gunakan
wm_concatuntuk menggabungkan nilai dari beberapa baris menjadi satu string yang dipisahkan koma, dikelompokkan berdasarkan kolom tertentu.Conditional aggregation: gunakan
CASE WHENdenganSUMuntuk menghitung atau menjumlahkan nilai berdasarkan kategori di seluruh baris—pendekatan standar SQL untuk mengubah tabel sempit menjadi tabel lebar.
Data contoh
Contoh pada halaman ini menggunakan tabel bernama students:
| class | gender | name |
|---|---|---|
| 1 | M | LiLei |
| 1 | F | HanMM |
| 1 | M | Jim |
| 1 | F | HanMM |
| 2 | F | Kate |
| 2 | M | Peter |
Menggabungkan nilai baris menjadi string
Gunakan wm_concat untuk mengagregasi nilai dari beberapa baris menjadi satu string, dikelompokkan berdasarkan kolom tertentu.
Sintaks:
wm_concat([DISTINCT] '<delimiter>', <column>)| Parameter | Wajib | Deskripsi |
|---|---|---|
DISTINCT | Tidak | Menghapus nilai duplikat sebelum penggabungan |
<delimiter> | Ya | String pemisah yang ditempatkan di antara nilai-nilai yang digabungkan. |
<column> | Ya | Kolom yang nilainya akan digabungkan. |
Untuk referensi lengkap fungsi ini, lihat Aggregate functions.
Penggabungan dasar
Kelompokkan nama berdasarkan class, lalu gabungkan semua nilainya dengan koma:
SELECT class, wm_concat(',', name) AS names
FROM students
GROUP BY class;| class | names |
|---|---|
| 1 | LiLei,HanMM,Jim,HanMM |
| 2 | Kate,Peter |
Penggabungan dengan deduplikasi
Tambahkan DISTINCT untuk menghapus nilai duplikat sebelum penggabungan:
SELECT class, wm_concat(DISTINCT ',', name) AS names
FROM students
GROUP BY class;| class | names |
|---|---|
| 1 | LiLei,HanMM,Jim |
| 2 | Kate,Peter |
Menghitung nilai berdasarkan kategori (conditional aggregation)
Gunakan CASE WHEN dengan SUM untuk memutar nilai baris menjadi kolom—menghitung jumlah baris yang memenuhi setiap kondisi per kelompok.
Pernyataan berikut menghitung jumlah siswa laki-laki dan perempuan di setiap class:
SELECT
class,
SUM(CASE WHEN gender = 'M' THEN 1 ELSE 0 END) AS cnt_m,
SUM(CASE WHEN gender = 'F' THEN 1 ELSE 0 END) AS cnt_f
FROM students
GROUP BY class;| class | cnt_m | cnt_f |
|---|---|---|
| 1 | 2 | 2 |
| 2 | 1 | 1 |
Untuk menambahkan lebih banyak kategori, sertakan ekspresi tambahan SUM(CASE WHEN ...) dalam klausa SELECT.