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

MySQL Group Dengan dengan nomor N teratas dari masing-masing jenis

SELECT  mo.Letter, md.Rank
FROM    (
        SELECT  DISTINCT letter
        FROM    mytable
        ) mo
JOIN    mytable md
ON      md.Letter >= mo.Letter
        AND md.Letter <= mo.Letter
        AND Rank <=
        COALESCE
                (
                (
                SELECT  Rank
                FROM    mytable mi
                WHERE   mi.letter = mo.letter
                ORDER BY
                        Rank
                LIMIT 1, 1
                ),
                0xFFFFFFFF
                )

Anda harus memiliki indeks komposit pada (Letter, Rank) (dalam urutan ini)

Perhatikan konstruksi ini:

md.Letter >= mo.Letter
AND md.Letter <= mo.Letter

bukan hanya md.Letter = mo.Letter

Ini memaksa Range checked for each record yang lebih efisien.

Lihat artikel ini di blog saya:

untuk detail lebih lanjut tentang ini.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mengejek kueri penyisipan ke Database MySQL menggunakan Moq

  2. Apa cara terbaik untuk mengikat nilai desimal/ganda/float dengan PDO di PHP?

  3. Upaya tidak valid untuk Membaca saat pembaca ditutup

  4. Masukkan dan atur nilai dengan masalah max()+1

  5. Penjelasan Kerangka Ketersediaan Tinggi MySQL – Bagian II:Replikasi Semisinkron