你正在寻找的是所谓的模式,我做了类似的事情
Is there a simpler way to find MODE(S) of some values in MySQL
对于多于 1 种模式的情况(例如 id 2 出现 3 次,id 1 也出现 3 次)(sqlFiddle)
您可以使用以下查询之一
这将返回 id 1 和 2 作为逗号分隔的列表(当然,您必须将 yourTable 替换为您的实际表名)
SELECT GROUP_CONCAT(CASE WHEN occurs=@maxoccurs THEN value ELSE NULL END) as modes
FROM
(SELECT value,occurs,@maxoccurs:=GREATEST(@maxoccurs,occurs) as maxoccurs
FROM (SELECT id as value,count(*) as occurs
FROM yourTable
GROUP BY id)T1,(SELECT @maxoccurs:=0)mo
)T2;
这个将返回 id 1 和 2 作为 2 个单独的行
SELECT value as id FROM
(SELECT value,occurs,@maxoccurs as maxoccurs
FROM
(SELECT value,occurs,@maxoccurs:=GREATEST(@maxoccurs,occurs) as maxoccurs
FROM (SELECT id as value,count(*) as occurs
FROM yourTable
GROUP BY id)T1,(SELECT @maxoccurs:=0)mo
)T2
)T3
WHERE occurs = maxoccurs