是否可以对团体规模施加限制?

时间:2011-09-16 15:21:05

标签: mysql limit greatest-n-per-group

select * from tabName limit 25

通过上面的查询我得到25行,我想在这个结果中添加一个限制,每组5个记录。

有可能吗?

1 个答案:

答案 0 :(得分:2)

请参阅我对How to SELECT the newest four items per category?的答案,了解标准解决方案。这个问题经常在StackOverflow上出现,我们尝试将其标记为greatest-n-per-group。但在大多数情况下,人们会询问每组最大的 1 ,使用不同的解决方案。

请注意,针对每组最大n的解决方案要求您对每个组中的行的顺序有所了解,因此您的查询可以决定哪些属于您的结果设置和哪些是应该被排除的“额外”。

对于不关心顺序的解决方案,MySQL没有ANSI SQL:2003窗口函数,因此解决这个问题有点尴尬。但你可以用一些用户变量技巧来做到这一点:

SET @g := NULL;
SET @n := 0;

SELECT * FROM (
  SELECT IF(groupCol = @g, @n:=@n+1, @n:=1) AS n, @g:=groupCol AS groupCol, *
  FROM tabName
  -- put ORDER BY here if applicable
) AS t
WHERE n <= 5;

5替换为您希望放在每组行上的任何其他限制。