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

Pilih N catatan untuk setiap kategori dan urutkan berdasarkan X

MySQL tidak mendukung fungsi analitik (ROW_NUMBER, RANK, DENSE_RANK, NTILE...), tetapi Anda dapat meniru fungsi tersebut dengan variabel.

Jika Anda menginginkan N entri blog terbaru:

SELECT x.id,
       x.title,
       x.description,
       x.cat,
       x.filename,
       x.date
  FROM (SELECT bp.id,
               bp.title,
               bp.description,
               bp.cat,
               bp.filename,
               bp.date,
               CASE 
                 WHEN bp.cat = @category THEN @rownum := @rownum + 1
                 ELSE @rownum := 1
               END AS rank,
               @category := bp.cat
          FROM BLOG_POSTS bp
          JOIN (SELECT @rownum := 0, @category := NULL) r
      ORDER BY bp.cat, bp.date DESC) x
 WHERE x.rank <= N

Jika Anda ingin peringkat 1 menjadi posting blog paling awal, ubah ORDER BY menjadi:

ORDER BY bp.cat, bp.date


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara membuat cadangan database MySQL menggunakan AutoMySQLBackup

  2. Apakah MySQL InnoDB selalu memerlukan indeks untuk setiap batasan kunci asing?

  3. Pernyataan Persiapan MySQL - Panjang Maksimum 1000 Karakter

  4. cara mengimpor file excel (XLSX) ke mysql menggunakan nodejs

  5. Bagaimana Anda mendapatkan pencarian boolean Fulltext Anda untuk mengambil istilah C++?