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

Pra-pemesanan pernyataan GROUP BY

Di MySQL, cara teraman untuk melakukan ini mungkin melibatkan variabel:

select im.*
from (select im.*,
             (@rn := if(@p = platform_type_id, @rn + 1,
                        if(@p := platform_type_id, 1, 1)
                       )
             ) as rn
      from main_itemmaster im cross join
           (select @rn := 0, @p := '') params
      order by platform_type_id, (territory_id = 'US') desc
     ) im
where rn = 1;

Itu tidak melibatkan penggunaan fitur MySQL (salah) yang mengizinkan kolom di SELECT dari kueri agregasi yang tidak diagregasi dan tidak dalam GROUP BY .

Di sini adalah SQL Fiddle yang menunjukkannya berfungsi.

EDIT:

Pada subjek urutan evaluasi variabel. Dari dokumentasi :

Kode di atas, secara teknis, membaca variabel dalam pernyataan yang sama , tetapi juga dalam ekspresi . yang sama . Semantik if() (dan case yang terkadang juga saya gunakan) menjamin urutan evaluasi ekspresi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apa definisi bidang terbaik untuk menyimpan desimal .NET ke MySQL?

  2. lewati tabel saat menjalankan pemetaan konversi Doctrine

  3. Bagaimana cara mengatur varchar agar panjangnya tidak terbatas?

  4. PHP, MySQL - dapatkah Anda membedakan antara baris yang cocok dan baris yang terpengaruh?

  5. tidak dapat memeriksa nama pengguna ada atau tidak