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

Grup MySQL Berdasarkan dan Pesan Berdasarkan

Solusi sederhana adalah dengan membungkus kueri menjadi subpilihan dengan pernyataan ORDER pertama dan menerapkan GROUP BY nanti :

SELECT * FROM ( 
    SELECT `timestamp`, `fromEmail`, `subject`
    FROM `incomingEmails` 
    ORDER BY `timestamp` DESC
) AS tmp_table GROUP BY LOWER(`fromEmail`)

Ini mirip dengan menggunakan join tetapi terlihat jauh lebih bagus.

Menggunakan kolom non-agregat dalam SELECT dengan klausa GROUP BY tidak standar. MySQL umumnya akan mengembalikan nilai dari baris pertama yang ditemukannya dan membuang sisanya. Setiap klausa ORDER BY hanya akan berlaku untuk nilai kolom yang dikembalikan, bukan yang dibuang.

PEMBARUAN PENTING Memilih kolom non-agregat yang digunakan untuk bekerja dalam praktik tetapi tidak boleh diandalkan. Berdasarkan dokumentasi MySQL "ini berguna terutama ketika semua nilai di setiap kolom non-agregat yang tidak disebutkan dalam GROUP BY adalah sama untuk setiap grup. Server bebas memilih nilai apa pun dari setiap grup, jadi kecuali sama, nilai yang dipilih tidak dapat ditentukan ."

Mulai 5.7.5 ONLY_FULL_GROUP_BY diaktifkan secara default sehingga kolom non-agregat menyebabkan kesalahan kueri (ER_WRONG_FIELD_WITH_GROUP)

Seperti yang ditunjukkan @mikep di bawah, solusinya adalah menggunakan NILAI_APA SAJA() dari 5.7 ke atas

Lihathttp://www.cafewebmaster.com/mysql-order-sort-group https://dev.mysql.com/doc /refman/5.6/en/group-by-handling.html https://dev.mysql.com/doc /refman/5.7/en/group-by-handling.html https://dev.mysql.com /doc/refman/5.7/en/miscellaneous-functions.html#function_any-value



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. 4 Alat Baris Perintah yang Berguna untuk Memantau Kinerja MySQL di Linux

  2. pdo menyiapkan pernyataan dengan wildcard

  3. Apa yang Harus Diperiksa jika Pemanfaatan Memori MySQL Tinggi?

  4. Cara Menghapus Karakter Leading dan Trailing di MySQL

  5. 3 Cara Menemukan Baris yang Mengandung Huruf Besar di MySQL