是否可以对组大小应用限制?

问题描述:

select * from tabName limit 25 

通过上面的查询我得到25行,我想在此结果中为每组5个记录添加一个限制。是否可以对组大小应用限制?

这是可能的吗?

+1

Downvoter,请把OP放在骨头上,让他知道为什么。 :) –

+1

这是臭名昭着的(在MySQL中处理得很差)n组每个组与最大n组相似。我添加了最大的每组标签,因为可以使用这些方法,因为它只是n组每个组的优化。我希望(新)相关答案能够被使用。 – 2011-09-16 15:45:57

查看我对标准解决方案的How to SELECT the newest four items per category?的回答。这个问题经常出现在*上,我们试图标记它greatest-n-per-group。但在大多数情况下,人们都在询问每个组最大的问题,因此使用不同的解决方案。

注意,大多数的解决方案的最大正每组需要你有每个组中的行顺序的一些想法,所以你的查询可以决定哪些属于您的结果集,哪些是应该排除的“额外”。

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

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

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

替换5你想要把每组行任何其他限制。