SQL获取组子句的最高重复值

时间:2016-08-18 13:41:10

标签: sql sql-server

我想要一个SQL查询,它应该告诉我每个ID大部分时间重复的值。 例如,让我们采取下表:

Id  Value
1   10
1   20
1   10
1   10
2   1
1   3

期望输出

Id  Value   Count
1   10      3
2   1       1

从上面的例子可以看出,对于Id 1,值10重复了大部分时间,对于Id 2,值1重复了大部分时间 任何建议都会非常感激。

1 个答案:

答案 0 :(得分:3)

使用rank根据ID值按降序对ID进行编号,然后选取排名第一的行。

select id, value, cnt
from (select id, value, count(*) as cnt,
             rank() over (partition by id order by count(*) desc) as rnk
      from t
      group by id, value) x 
where rnk = 1

根据Gordon的评论,如果您在关联时只需要每个ID一个值,请使用row_number代替rank,因为rank会返回所有关联价值计数。