Sql选择胜利者

时间:2016-05-02 00:02:35

标签: sql oracle

拥有此数据库,粗体= PK

证书( USERID CERTIFICATENAME

我需要找到具有SQL查询的最大证书数的用户ID。

示例数据:

USERID, CERTIFICATENAME
1,cert1
1,cert2
1,cert3
2,cert4
2,cert5
3,cert2
4,cert1

使用此示例数据我需要查询以查找用户:1有3个证书,此用户具有最大证书数。

请求结果:

USERID, COUNT
1,3

在这种情况下我的dbms是oracle,但我正在为我的问题寻找通用的sql解决方案。

2 个答案:

答案 0 :(得分:2)

作为子查询:

SELECT MAX(Total), UserId FROM -- select the max count
( -- create the counts per user
    SELECT Count(CertificateName) as Total, 
           UserId 
    FROM YourTable 
    GROUP BY CertificateName, UserId
) GROUP BY Total, UserId

答案 1 :(得分:2)

使用旧的普通组:

select top 1 userid, count(certificatename) total
from certificates
group by userid -- but not certificatename
order by 2 desc --you can use total or count(certificatname) here

公用表格式(CTE)不会添加任何性能偏好,因为在任何情况下都需要分组。