我有一个存储日志条目的表,简化版本将是
key value
a 1
a 2
a 3
a 2
b 1
b 2
b 2
我想提取出现最多的组合,如:
key value
a 2
b 2
由于a-1
和a-3
组合只出现一次,a-2
组合只有两次。
欢迎使用任何类型的SQL解决方案,我只是想知道解决这个问题的要点,我会为自己的平台/ sql变体找到合适的解决方案。
基于Gordon Linoff的出色答案以及我的平台可以提供的能力,我最终使用了这样的东西:
select
key,
value
from (
select
key,
value,
rank() over(partition by key order by t1.cnt desc) as rank
from (
select
key,
value,
count(*) as cnt
from
table
group by
key,
value
) t1
group by
key,
value,
t1.cnt
) t2
where t2.rank = 1
答案 0 :(得分:1)
如果有平局,我可以使用任何一种组合
你可以试试这个
SELECT `key`
,`value`
FROM t
GROUP BY `key`
,`value`
ORDER BY count(*) DESC LIMIT 1
答案 1 :(得分:1)
这是MySQL的痛苦,但你可以这样做:
select key, value, count(*) as cnt
from t
group by key, value
having cnt = (select count(*)
from t
group by key, value
order by count(*) desc
limit 1
);
如果您使用的是MySQL版本8或任何其他数据库,请使用rank()
或窗口函数:
select key, value, cnt
from (select key, value, count(*) as cnt,
max(count(*)) over () as max_cnt
from t
group by key, value
) t
where cnt = max_cnt;
答案 2 :(得分:0)
试试这个
{{1}}