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

MYSQL - Nhóm theo giới hạn

Tôi không nghĩ rằng có một cách đơn giản trong MySQL. Một cách để làm điều này là tạo một số hàng cho mỗi hàng được phân vùng trong các nhóm theo rating_name, sau đó chỉ chọn các hàng có row_number 2 trở xuống. Trong hầu hết các cơ sở dữ liệu, bạn có thể thực hiện việc này bằng cách sử dụng một cái gì đó như:

SELECT * FROM (
    SELECT
        rating_name,
        etc...,
        ROW_NUMBER() OVER (PARTITION BY rating_name ORDER BY good) AS rn
    FROM your_table
) T1
WHERE rn <= 2

Rất tiếc, MySQL không hỗ trợ ROW_NUMBER cú pháp. Tuy nhiên, bạn có thể mô phỏng ROW_NUMBER sử dụng các biến:

SELECT
    rating_name, id_markets, good, neutral, bad
FROM (
    SELECT
        *,
        @rn := CASE WHEN @prev_rating_name = rating_name THEN @rn + 1 ELSE 1 END AS rn,
        @prev_rating_name := rating_name
    FROM (
        SELECT
            rating_name,
            id_markets,
            SUM(COALESCE(rating_good, 0)) AS good,
            SUM(COALESCE(rating_neutral, 0)) AS neutral,
            SUM(COALESCE(rating_bad, 0)) AS bad
        FROM zzratings
        WHERE rating_year = YEAR(CURDATE()) AND rating_week = WEEK(CURDATE(), 1)
        GROUP BY rating_name, id_markets
    ) AS T1, (SELECT @prev_rating_name := '', @rn := 0) AS vars
    ORDER BY rating_name, good DESC
) AS T2
WHERE rn <= 2
ORDER BY rating_name, good DESC

Kết quả khi chạy trên dữ liệu thử nghiệm của bạn:

france    1  2  0  0
france    2  1  0  0
ireland   1  4  2  0
ireland  21  3  1  0
poland    1  3  1  0
poland    2  1  0  0


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tại sao mysql bỏ qua một số id tăng tự động?

  2. Phương pháp hay nhất cho hệ thống lập phiên bản dữ liệu mysql

  3. Làm cách nào để kích hoạt quyền truy cập bên ngoài vào MySQL Server?

  4. MS-SQL có hỗ trợ bảng trong bộ nhớ không?

  5. Có cách nào đơn giản hơn để đạt được phong cách nhắn tin của người dùng này không?