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

Mysql chọn (n) hàng của mỗi lần xuất hiện

Những gì bạn đang cố gắng làm là chọn một số bản ghi cho mỗi nhóm. Điều này có thể được thực hiện bằng cách sử dụng các biến trong truy vấn của bạn tương tự như sau:

select *
from
(
    SELECT sid, 
        state, 
        votes,
        @prev := @curr,
        @curr := state,
        @rank := IF(@prev = @curr, @rank+1, 1) AS rank
    FROM
    (
      select t1.sid, state, votes
      FROM table1 t1
      INNER JOIN table2 t2
          ON t1.sid=t2.sid
    ) src, (SELECT @curr := null, @prev := null, @rank := 1) r
    ORDER BY state, votes desc
) src
where rank <= 2
order by state, votes;

Xem SQL Fiddle with Demo

Có những cách khác để thực hiện việc này được nêu ở đây:

Sử dụng LIMIT trong GROUP BY để nhận được N kết quả cho mỗi nhóm?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. symfony 1.4 propel:build-all không hoạt động trên Mysql 5.5

  2. điều kiện cuộc đua chèn mysql

  3. MIN () - Tìm giá trị nhỏ nhất trong một cột trong MySQL

  4. Cách thoát an toàn dữ liệu đầu vào trong php cho mysql

  5. Bỏ qua thông báo lỗi mysql khi thực thi tệp sql