2011-09-16 41 views
1
select * from tabName limit 25 

通過上面的查詢我得到25行,我想在此結果中爲每組5個記錄添加一個限制。是否可以對組大小應用限制?

這是可能的嗎?

+1

Downvoter,請把OP放在骨頭上,讓他知道爲什麼。 :) –

+1

這是臭名昭着的(在MySQL中處理得很差)n組每個組與最大n組相似。我添加了最大的每組標籤,因爲可以使用這些方法,因爲它只是n組每個組的優化。我希望(新)相關答案能夠被使用。 – 2011-09-16 15:45:57

回答

2

查看我對標準解決方案的How to SELECT the newest four items per category?的回答。這個問題經常出現在StackOverflow上,我們試圖標記它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你想要把每組行任何其他限制。

相關問題