sql запросов Highest 3 - PullRequest
       18

sql запросов Highest 3

0 голосов
/ 15 февраля 2011

Схема:

Cereal  
Cereal_name  
Buyer_name

Cereal_name это название злака
Buyer_name - это покупатель, который принес определенную крупу

Я пытаюсь перечислить каждую крупу и количество раз, когда они были куплены, а затем найти лучшие 4 крупы: пример ответа:

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

примечание: их 4, потому что у одного из них одинаковое число

что у меня есть:

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

Я хотел использовать rowNum<=3, но в этом случае это не сработает

Заранее спасибо!

Ответы [ 3 ]

2 голосов
/ 15 февраля 2011

Попробуйте:

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

Я предположил, что Oracle.

DB2:

Возможно, это так, но я не уверен:

SELECT 
    Cereal_name, 
    COUNT(*) as numOfCount
FROM Cereal
GROUP BY numOfCount
ORDER BY COUNT(*) DESC
FETCH FIRST 3 ROWS ONLY
1 голос
/ 15 февраля 2011

Может быть, это?

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
1 голос
/ 15 февраля 2011

Если вы не можете использовать режим совместимости 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...