使用SQL查找表中值的最高计数

时间:2019-01-14 19:41:35

标签: sql

我正在寻找一种通过SQL查找列的顶部计数值的方法。 例如,如果这是我的数据

id   type
----------
 1    A
 1    B
 1    A
 2    C
 2    D
 2    D

我希望结果是:

1   A
2   D

我正在寻找一种方法,而又不会影响我计算的列(在示例中输入)

谢谢

3 个答案:

答案 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