拥有此数据库,粗体= 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解决方案。
答案 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)不会添加任何性能偏好,因为在任何情况下都需要分组。