2014-02-20 49 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

我通过增加一个分组来修复它 –