Masalah:
Anda ingin mengelompokkan data menurut dua kolom sehingga Anda dapat menghitung beberapa statistik.
Contoh:
Dalam order
tabel, Anda memiliki kolom order_date
, product_id
, customer_id
, dan number
. Anda ingin menghitung jumlah produk yang dibeli oleh setiap pelanggan setiap hari.
order
tabel terlihat seperti ini:
tanggal_pesanan | id_produk | id_pelanggan | angka |
---|---|---|---|
25-11-2020 | 7 | 1 | 1 |
25-11-2020 | 12 | 1 | 3 |
26-11-2020 | 53 | 1 | 2 |
26-11-2020 | 1 | 2 | 4 |
26-11-2020 | 3 | 2 | 1 |
26-11-2020 | 16 | 2 | 7 |
26-11-2020 | 3 | 3 | 2 |
27-11-2020 | 6 | 3 | 1 |
Solusi:
SELECT order_date, customer_id, SUM(number) AS products_number FROM order
Hasilnya adalah:
tanggal_pesanan | id_pelanggan | products_number |
---|---|---|
26-11-2020 | 3 | 2 |
27-11-2020 | 3 | 1 |
26-11-2020 | 2 | 12 |
25-11-2020 | 1 | 4 |
26-11-2020 | 1 | 2 |
Diskusi:
Untuk mengelompokkan menurut dua kolom, cukup gunakan GROUP BY
dengan dua kolom. Nama kolom harus dicantumkan setelah GROUP BY
kata kunci dan dipisahkan dengan koma. Grup akan dibuat berdasarkan nilai dari kedua kolom; untuk setiap pasangan nilai, grup terpisah dibuat (mis. ('2020-11-25', 1)
). Perhatikan tabel di bawah ini, di mana setiap kelompok disajikan dalam warna yang berbeda:
tanggal_pesanan | id_pelanggan | id_produk | angka |
---|---|---|---|
25-11-2020 | 1 | 7 | 1 |
25-11-2020 | 1 | 12 | 3 |
26-11-2020 | 1 | 53 | 2 |
26-11-2020 | 2 | 1 | 4 |
26-11-2020 | 2 | 3 | 1 |
26-11-2020 | 2 | 16 | 7 |
26-11-2020 | 3 | 3 | 2 |
27-11-2020 | 3 | 6 | 1 |
Jika salah satu atau kedua kolom memiliki NULLs
nilai, nilai ini diperlakukan sebagai grup terpisah (mis., ('2020-11-26', NULL)
, (NULL, 5)
atau (NULL, NULL)
).
Di sisi lain, jika ada NULLs
di kolom tempat kita menerapkan fungsi agregat, NULLs
nilai dihilangkan begitu saja. (Dalam contoh ini, fungsi agregat adalah SUM()
dan kolomnya adalah number
). Jika kita memiliki nilai angka 2 , 1 , dan NULL untuk salah satu grup, SUM(number)
akan sama dengan 3
(2
dan 1
ditambahkan bersama-sama, dan NULLs
dihilangkan.)
Demikian pula, Anda dapat mengelompokkan menurut sejumlah kolom – cukup tulis nama kolom di GROUP BY
klausa dan pisahkan dengan koma.