2016-08-18 73 views
2

我想要一个SQL查询,它应该告诉我,对于每个重复大部分时间重复的ID。 例如让我们如下表:SQL获得组重复值最高的组子句

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

所需的输出

Id Value Count 
1 10  3 
2 1  1 

从上面的例子,它示出了用于标识1,值10被重复的次数和用于标识2,值1最重复了大多数时间 任何建议将非常感激。

回答

3

使用rank来根据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 

基于戈登的评论,如果您需要联系的情况下,每个ID只能有一个值,用row_number而不是rank,如rank回报值计数的所有联系。

+3

注意:如果有关系,'rank()'将为同一'id'返回多行。如果你想保证每个'id'只有一行,那就用'row_number()'代替。 –