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

Apakah ORDER BY berlaku sebelum atau sesudah DISTINCT?

Dua hal yang perlu dipahami:

  1. Secara umum, kumpulan hasil tidak berurutan kecuali jika Anda menentukan ORDER BY ayat; sejauh Anda menentukan pesanan tidak ketat (yaitu ORDER BY di atas kolom non-unik), urutan di mana catatan yang sama di bawah urutan itu muncul dalam hasil yang tidak ditentukan.

    Saya menduga Anda mungkin menentukan urutan yang tidak ketat, yang merupakan akar masalah Anda:pastikan bahwa pemesanan Anda ketat dengan menentukan ORDER BY lebih dari satu set kolom yang cukup untuk secara unik mengidentifikasi setiap catatan yang Anda pedulikan dengan posisi akhirnya di kumpulan hasil.

  2. DISTINCT boleh menggunakan GROUP BY , yang menyebabkan hasil diurutkan berdasarkan kolom yang dikelompokkan; yaitu, SELECT DISTINCT a, b, c FROM t akan menghasilkan hasil yang muncul seolah-olah ORDER BY a, b, c telah diterapkan. Sekali lagi, menentukan urutan yang cukup ketat untuk memenuhi kebutuhan Anda akan mengesampingkan efek ini.

Mengikuti pembaruan Anda, mengingat poin saya #2 di atas, jelas bahwa efek pengelompokan hasil untuk mencapai DISTINCT membuat tidak mungkin untuk kemudian memesan dengan kolom yang tidak dikelompokkan p.id; sebagai gantinya, Anda ingin:

SELECT   t.*
FROM     Threads t INNER JOIN Posts p ON t.id = p.threadid
GROUP BY t.id
ORDER BY MAX(p.id) DESC


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mencoba melakukan operasi MINUS di MySQL

  2. Menambahkan hanya satu nilai ke tabel di sql

  3. 8 Database Paling Populer

  4. Bagaimana saya bisa mengatur mesin penyimpanan default yang digunakan oleh MySQL?

  5. Bagaimana cara menginstal adaptor Rails MySQL?