select 出现次数最多的id
select id that occur the most
我有两张桌子
Users(user_id, name)
Competition(comp_id, user_id, score)
我需要 select user_id 在比赛中出现的次数最多。
我可以用 max(count) 来做吗?
如果两个用户的出现次数相同,有什么办法可以得到异常吗?
我试过了:
SELECT MAX(numberr), USER_ID
FROM (
SELECT USER_ID, COUNT(COMP_ID) AS numberr
FROM COMPETITION
GROUP BY USER_ID
)
GROUP BY USER_ID;
但我得到的结果是:
MAX(numberr) USER_ID
4 1
2 2
6 3
您可以通过 COUNT
完成它:
SELECT *
FROM (SELECT USER_ID,COUNT(comp_id) as numberr
FROM COMPETITION
GROUP BY USER_ID
ORDER BY COUNT(comp_id) DESC) T1
WHERE rownum=1;
您可以使用 not exists
来完成。如果有两个用户的最大计数相同,则都显示。
with temp as
(
SELECT USER_ID, COUNT(COMP_ID) AS numberr
FROM COMPETITION GROUP BY USER_ID
)
select *
from temp t
where not exists (select 1 from temp where numberr > t.numberr)
要获得 多个 用户的最大数量,请使用 RANK:
SELECT numberr, USER_ID
FROM (
SELECT USER_ID, COUNT(COMP_ID) AS numberr
,RANK() OVER (PARTITION BY USER_ID ORDER BY COUNT(COMP_ID) DESC) rnk
FROM COMPETITION
GROUP BY USER_ID
) dt
WHERE rnk = 1;
我有两张桌子
Users(user_id, name)
Competition(comp_id, user_id, score)
我需要 select user_id 在比赛中出现的次数最多。
我可以用 max(count) 来做吗?
如果两个用户的出现次数相同,有什么办法可以得到异常吗?
我试过了:
SELECT MAX(numberr), USER_ID
FROM (
SELECT USER_ID, COUNT(COMP_ID) AS numberr
FROM COMPETITION
GROUP BY USER_ID
)
GROUP BY USER_ID;
但我得到的结果是:
MAX(numberr) USER_ID
4 1
2 2
6 3
您可以通过 COUNT
完成它:
SELECT *
FROM (SELECT USER_ID,COUNT(comp_id) as numberr
FROM COMPETITION
GROUP BY USER_ID
ORDER BY COUNT(comp_id) DESC) T1
WHERE rownum=1;
您可以使用 not exists
来完成。如果有两个用户的最大计数相同,则都显示。
with temp as
(
SELECT USER_ID, COUNT(COMP_ID) AS numberr
FROM COMPETITION GROUP BY USER_ID
)
select *
from temp t
where not exists (select 1 from temp where numberr > t.numberr)
要获得 多个 用户的最大数量,请使用 RANK:
SELECT numberr, USER_ID
FROM (
SELECT USER_ID, COUNT(COMP_ID) AS numberr
,RANK() OVER (PARTITION BY USER_ID ORDER BY COUNT(COMP_ID) DESC) rnk
FROM COMPETITION
GROUP BY USER_ID
) dt
WHERE rnk = 1;