Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chọn N bản ghi cho mỗi danh mục và sắp xếp theo X

MySQL không hỗ trợ các hàm phân tích (ROW_NUMBER, RANK, DENSE_RANK, NTILE ...), nhưng bạn có thể mô phỏng chức năng với các biến.

Nếu bạn muốn N các bài đăng trên blog gần đây nhất:

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

Nếu bạn muốn xếp hạng 1 là bài đăng trên blog sớm nhất, hãy thay đổi ĐẶT HÀNG BẰNG CÁCH:

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. PHP Lỗi nghiêm trọng:Không tìm thấy lớp 'PDO'

  2. Hàm MySQL SHA2 dường như không hoạt động

  3. Lệnh SELECT để tính toán tỷ lệ phần trăm

  4. Chạy 2 truy vấn cùng nhau nhưng thực thi riêng lẻ

  5. MySQL nhóm các kết quả nhất định thành một mảng