我想要一个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重复了大部分时间 任何建议都会非常感激。
答案 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
会返回所有关联价值计数。