Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Kueri dengan GROUP BY dan ORDER BY tidak berfungsi ketika beberapa kolom di SELECT dipilih

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pilih baris dan kolom tertentu dari database SQL

  2. Mysql-php bagaimana menerapkan kumpulan koneksi dengan php v 5.2 dan tidak ada koneksi persisten yang diizinkan

  3. Bagaimana cara menyimpan nilai FLOAT yang hilang dengan NULL di SQL

  4. Pemahaman yang lebih baik - Class.forName(com.mysql.jdbc.Driver).newInstance();

  5. Kembalikan hanya satu baris dari tabel paling kanan untuk setiap baris di tabel paling kiri