Mysql选择(n)每次出现的行

时间:2013-01-14 21:25:02

标签: mysql select

  

可能重复:
  mysql: Using LIMIT within GROUP BY to get N results per group?

我需要执行一个选择,它将返回(n)每个唯一us_state的记录数。

基本上,我想找到一个等同于TOP(n),但由于MySQL不支持它,是否有一个类似的命令或方法,我可以用来快速权限专用代码执行相同的操作?

感谢。

2 个答案:

答案 0 :(得分:1)

您要做的是为每个组选择一些记录。这可以通过在查询中使用与此类似的变量来完成:

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;

请参阅SQL Fiddle with Demo

此处列出了其他方法:

Using LIMIT within GROUP BY to get N results per group?

答案 1 :(得分:0)

MySQL中的

Limit optimization就是这样做的。


修改

由于您希望按某种类型的列或其他类型对它们进行排序,因此您还需要ORDER BY子句。

相关问题