2011-02-14 72 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