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)

SQLFiddle

要获得 多个 用户的最大数量,请使用 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;