2014-02-20 85 views
0

我有一個表如下mysql的最大計數

id qNum opNum 
1 1  3 
2 1  3 
3 1  2 
4 1  1 
5 2  4 
6 2  4 
7 2  4 
8 2  1 

我需要通過qNum然後opNum分組計數,這是細做,但我只想要回qNum和在每個分組

與最大計數記錄opNum所以我非常需要一個記錄,看起來像

qNum opNum maxCount 
1  3  2 
2  4  3 

幫助將不勝感激!

+1

'SELECT COUNT (*)...通過qnum,opnum'分組? –

+0

當你在每個組中說,你的意思是在每一組'qNum'? – sgeddes

+0

我希望在每個qNum內都有最重要的opnum – Dave

回答

1

雖然這並不十分好看,我認爲它達到你想要的結果:

select y.qnum, y.opnum, maxcnt 
from (
    select qnum, opnum, count(*) cnt 
    from yourtable 
    group by qnum, opnum 
) y 
    join (
    select qnum, max(cnt) maxcnt 
    from (
     select qnum, opnum, count(*) cnt 
     from yourtable 
     group by qnum, opnum) t 
    group by qnum 
    ) t on y.qnum = t.qnum and y.cnt = t.maxcnt 
+0

非常好,非常感謝您的回覆。 – Dave

+0

它可能太重 - 很多選擇和加入。 – maszter

+0

Aaaarrgh!剛剛注意到這個問題......如果有一個問題有相同數量的計數有兩個選項,那麼它會返回兩個選項和它們的計數,但我真的只需要一個,哪一個並不重要。這可以合併嗎? – Dave

1

簡單的解決方案可能是:

SELECT qNum, opNum, MAX(temp.maxcount) AS maxcount FROM(
SELECT qNum, opNum, COUNT(*) AS maxCount 
FROM t 
GROUP BY opNum, qNum ORDER BY maxcount DESC 
) AS temp GROUP BY qNum 
+0

這可能會導致在最終輸出中出現錯誤的opnum – Dave

+1

我通過增加一個分組來修復它 –