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

Я хотел бы получить opnum с наибольшим количеством баллов, в пределах каждого qNum – 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

Simpler решение может быть:

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

Я исправил его, добавив еще одну группу –

Смежные вопросы