选择具有最大出现次数的所有行(如果有多个行,则显示所有行)

时间:2015-04-11 13:46:19

标签: mysql max

我有一个表emp和empid和reviewid:

CREATE TABLE 'emp' (
   'empid' INT NOT NULL,
   'reviewid' INT NULL,
   PRIMARY KEY ('empid'));


INSERT INTO 'emp' ('empid', 'reviewid') VALUES ('1', '1');
INSERT INTO  'emp' ('empid', 'reviewid') VALUES ('2', '1');
INSERT INTO 'emp' ('empid', 'reviewid') VALUES ('3', '2');
INSERT INTO 'emp' ('empid', 'reviewid') VALUES ('4', '2');
INSERT INTO 'emp' ('empid', 'reviewid') VALUES ('5', '3');
INSERT INTO 'emp' ('empid', 'reviewid') VALUES ('6', '4');

我想选择出现次数最多的评论,更重要的是(我不知道该怎么做的部分)是在出现平局时显示出现次数最多的所有行。因此,在上面的示例中,结果应该是reviewid 1和2(因为它们都出现了两次)。

-------------------------------------------------------
| reviewid                                            |
|   1                                                 |
|   2                                                 |
-------------------------------------------------------

谢谢

2 个答案:

答案 0 :(得分:0)

可以试试......

SELECT reviewid FROM emp GROUP BY reviewid HAVING COUNT(*) =
(SELECT COUNT(*) FROM emp GROUP BY reviewid ORDER BY COUNT(*) DESC LIMIT 1)

答案 1 :(得分:0)

使用聚合执行此操作会导致相当麻烦的查询:

select reviewid, count(*)
from emp
group by reviewid
having count(*) = (select max(cnt)
                   from (select reviewid, count(*) as cnt
                         from emp
                         group by reviewid
                        ) r
                  );

如果您需要详细信息,则可以加入原始行。