我正在寻找一种通过SQL查找列的顶部计数值的方法。 例如,如果这是我的数据
id type
----------
1 A
1 B
1 A
2 C
2 D
2 D
我希望结果是:
1 A
2 D
我正在寻找一种方法,而又不会影响我计算的列(在示例中输入)
谢谢
答案 0 :(得分:2)
从统计上讲,这称为“模式”。您可以使用窗口函数进行计算:
select id, type, cnt
from (select id, type, count(*) as cnt,
row_number() over (partition by id order by count(*) desc) as seqnum
from t
group by id, type
) t
where seqnum = 1;
如果有关系,则从关系中选择一个任意值。
答案 1 :(得分:1)
您正在寻找统计模式(最常出现的值):
select id, stats_mode(type)
from mytable
group by id
order by id;
但是,并非所有DBMS都支持此功能。如果您的数据库管理系统中提供此功能或类似功能,请检查您的文档。
答案 2 :(得分:0)
仅GROUP BY id, type
并保持计数器最大的行:
select id, type
from tablename
group by id, type
having count(*) = (
select count(*) from tablename group by id, type order by count(*) desc limit 1
)
请参见demo
或
select id, type
from tablename
group by id, type
having count(*) = (
select max(t.counter) from (select count(*) counter from tablename group by id, type) t
)
请参见demo