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

mysql pilih nilai n max teratas

Untuk n=2 Anda bisa

SELECT max(column1) m 
FROM table t
GROUP BY column2
UNION
SELECT max(column1) m
FROM table t
WHERE column1 NOT IN (SELECT max(column1) 
                      WHERE column2 = t.column2)

untuk setiap n Anda dapat menggunakan pendekatan yang dijelaskan di sini untuk mensimulasikan peringkat di atas partisi.

EDIT:Sebenarnya ini artikel akan memberikan apa yang Anda butuhkan.

Pada dasarnya seperti ini

SELECT t.*
FROM
   (SELECT grouper,
          (SELECT val 
           FROM table li
           WHERE li.grouper = dlo.grouper
           ORDER BY
                 li.grouper, li.val DESC
           LIMIT 2,1) AS mid
   FROM 
      (
      SELECT DISTINCT grouper
      FROM table
      ) dlo 
   ) lo, table t
WHERE t.grouper = lo.grouper
      AND t.val > lo.mid

Ganti grouper dengan nama kolom yang ingin Anda kelompokkan dan val dengan nama kolom yang menyimpan nilai.

Untuk mengetahui bagaimana tepatnya fungsinya, lakukan langkah demi langkah dari kueri paling dalam dan jalankan.

Juga, ada sedikit penyederhanaan - subquery yang menemukan mid dapat mengembalikan NULL jika kategori tertentu tidak memiliki nilai yang cukup sehingga harus ada COALESCE dari itu ke beberapa konstanta yang masuk akal dalam perbandingan (dalam kasus Anda itu akan menjadi MIN dari domain val, dalam artikel itu MAX).

EDIT2: Saya lupa menyebutkan bahwa LIMIT 2,1 yang menentukan n (LIMIT n,1).



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara membuat format json dengan mysql grup-concat?

  2. Bagaimana cara lag kolom di MySQL?

  3. Bagaimana saya bisa mencari (tidak peka huruf besar/kecil) di kolom menggunakan wildcard LIKE?

  4. Bagaimana cara menghapus semua karakter numerik non-alfa dari string di MySQL?

  5. Koneksi MySQL tidak berfungsi:2002 Tidak ada file atau direktori seperti itu