Anda harus berhati-hati saat menggunakan GROUP BY
. Setelah Anda memahami apa itu GROUP BY
tidak, Anda akan tahu masalahnya sendiri. Itu melakukan agregasi pada data Anda atau dengan kata lain, ini mengurangi data Anda dengan melakukan beberapa operasi pada entri mentah dan membuat jumlah entri baru yang dikurangi di mana beberapa fungsi agregasi telah diterapkan (SUM, COUNT, AVG, dll.)
Bidang yang Anda berikan di GROUP BY
klausa mewakili tingkat agregasi/roll-up yang Anda tuju.
SELECT col2, col3 FROM tbl WHERE col1 IS NULL GROUP BY col1 ORDER BY col1
Di sini Anda mencoba melakukan agregasi di col1
level, artinya untuk setiap nilai berbeda yang ada di kolom col1
, akan ada beberapa operasi yang dilakukan pada beberapa kolom lain yang Anda berikan di SELECT
klausa (di sini col2
,col3
) sehingga dalam output Anda memiliki nilai yang tidak berulang di col1
dan beberapa nilai gabungan col2
dan col3
terhadap setiap col1
yang berbeda nilai berdasarkan fungsi apa yang Anda terapkan (SUM, COUNT, AVG, dll.).
Bagaimana Anda menerapkan fungsi ini? Itulah yang hilang dalam kueri Anda di atas. Untuk mengatasinya, Anda perlu menerapkan beberapa fungsi agregasi pada bidang yang ada di SELECT
klausa tetapi tidak dalam GROUP BY
ayat. Mengambil contoh SUM, coba ini:
SELECT SUM(col2), SUM(col3) FROM tbl WHERE col1 IS NULL GROUP BY col1 ORDER BY col1
ATAU untuk ide yang lebih baik, hapus WHERE
filter dan periksa output dengan menjalankan:
SELECT col1, SUM(col2), SUM(col3) FROM tbl GROUP BY col1 ORDER BY col1
Selain itu, alasan mengapa kueri Anda yang lain
SELECT col2 FROM tbl WHERE col1 IS NULL GROUP BY col2 ORDER BY col2
berhasil karena Anda tidak perlu menerapkan agregasi ke bidang (di sini col2
) yang ada di GROUP BY
klausa.