SQL Oracle查找最大计数

时间:2018-12-02 21:03:58

标签: sql oracle

我将此表称为item:

| PERSON_id        | ITEM_id        |
|------------------|----------------|
|------CP2---------|-----A03--------|
|------CP2---------|-----A02--------|
|------HB3---------|-----A02--------|
|------BW4---------|-----A01--------|

我需要一条SQL语句,该语句将输出具有最多Items的人。也不十分确定从哪里开始。

2 个答案:

答案 0 :(得分:1)

我建议您为此使用内部查询。内部查询将包含group by和order by语句。外部查询将选择第一个包含最多项目的语句。

SELECT * FROM 
( 
  SELECT PERSON_ID, COUNT(*) FROM TABLE1 
  GROUP BY PERSON_ID
  ORDER BY 2 DESC
)
WHERE ROWNUM = 1

这是提琴手链接:http://sqlfiddle.com/#!4/4c4228/5

答案 1 :(得分:0)

找到一个聚合列的最大值需要进行多个计算,因此您可以在此处使用“公用表表达式”(cte)来保存结果,然后在where子句中重复使用该结果:

with cte as (
    select
          person_id
        , count(item_id) count_items
    from mytable
    group by
         person_id
    )
select
*
from cte
where count_items = (select max(count_items) from cte)

请注意,如果一个以上的人共享相同的最大计数;此查询将返回多行。