2011-02-14 53 views
0

一个模式:SQL查询最高3

Cereal 
Cereal_name 
Buyer_name 

Cereal_name是谷物
Buyer_name的名字是谁带来了一定的谷物

我试图列出每个谷物和数字买家他们都买次,然后找到顶级的4谷物:例如一个答案是:

'HoneyNut' 400 
'Cap'n Crunch' 400 
'Chocolate Flakes' 300 
'Frosted Flakes' 200 

注:疗法e为4,因为他们中的一个具有相同数量的

我有什么是:

Select Cereal_name, count(*) as numOfCount 
From Cereal 
Group By numOfCount Desc 

我想用rowNum<=3但在这种情况下无法正常工作

提前感谢!

+1

哪个数据库? – 2011-02-14 22:04:25

+1

您使用的是什么RDBMS? `rowNum`在哪里定义? – 2011-02-14 22:04:33

+0

我正在使用DB2,我认为rownum是给出的,它不是? – user308553 2011-02-14 22:07:24

回答

2

尝试:

SELECT * FROM 
(SELECT 
    Cereal_name, 
    COUNT(*) as numOfCount 
FROM Cereal 
GROUP BY numOfCount 
ORDER BY COUNT(*) DESC 
) CEREALS 
WHERE ROWNUM <= 3 

我认为甲骨文。

DB2:

也许这一点,但我不知道:

SELECT 
    Cereal_name, 
    COUNT(*) as numOfCount 
FROM Cereal 
GROUP BY numOfCount 
ORDER BY COUNT(*) DESC 
FETCH FIRST 3 ROWS ONLY 
1

如果你不能使用DB2的兼容模式,使用标准的ANSI SQL窗口函数应该让你有:

 
select * 
from (
    select t1.*, 
     dense_rank() over (order by cereal_count) as rank 
    from (
    select cereal_name, 
      count(*) as cereal_count 
    from cereal 
    group by cereal_name 
) t1 
) t2 
where rank <= 3 
order by rank desc 
1

也许这样?

SELECT G.Cereal_name, G.numOfCount 
FROM (
    Select Cereal_name, count(*) as numOfCount 
    From Cereal 
    Group By Cereal_name) G 
inner join (
    Select DISTINCT count(*) as numOfCount 
    From Cereal 
    Group By Cereal_name 
    order by numOfCount Desc 
    FETCH FIRST 3 ROWS ONLY) C on C.numOfCount = G.numOfCount 
order by G.numOfCount DESC