我一直在寻找一种方法来执行 MySQL 选择以获取所有最常出现的值。我在使用 LIMIT 1 时找到的所有解决方案,但是如果有多个值出现相同的次数,这将无济于事。例如:
客户
ID | 名字 |
---|---|
1 | 鲍勃 |
2 | 汤姆 |
3 | 鲍勃 |
4 | 罗伯特 |
5 | 汤姆 |
6 | 蒂莫西 |
选择出现次数最多的名字应该导致:
名字 |
---|
鲍勃 |
汤姆 |
因为两者都出现了两次。
我尝试了以下方法:
SELECT FirstName FROM (
SELECT FirstName, COUNT(FirstName) as counter FROM customer
GROUP BY FirstName
HAVING counter = MAX(counter)
) s
但这似乎不起作用,我真的很感激朝正确方向的推动。
答案 0 :(得分:1)
可以有不同的方法来做到这一点
你可以试试
第一个
SELECT FIRSTNAME
FROM customer
GROUP BY FirstName Having count(FirstName) = (
SELECT COUNT(FirstName) FROM customer GROUP BY FirstName ORDER BY 1
DESC LIMIT 1);
第二个
with cte as
(
SELECT COUNT(FirstName) MaxCounter
FROM customer
Group By FirstName ORDER BY COUNT(FirstName) DESC LIMIT 1
)
SELECT c.FirstName
From customer c
Group BY FirstName
HAVING COUNT(FirstName) = (SELECT MaxCounter FROM cte)