0

可能重复:
mysql:在 GROUP BY 中使用 LIMIT 来获得每组 N 个结果?

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

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

谢谢。

4

2 回答 2

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

还有其他方法可以做到这一点,这里概述了:

在 GROUP BY 中使用 LIMIT 来获得每组 N 个结果?

于 2013-01-14T22:17:42.813 回答
0

MySQL 中的限制优化就是这样做的。


编辑

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

于 2013-01-14T21:30:22.147 回答