/ / Selecionando os principais resultados da consulta de contagem de SQL, incluindo junção de tabela - Oracle - sql, oracle, junção, filtro, contagem

Selecionando os principais resultados da consulta Contagem de SQL, incluindo junção de tabela - Oracle - sql, oracle, join, filter, count

Eu tenho esta consulta atualmente, que seleciona o "número de coletas" superior em ordem decrescente. Eu preciso filtrar apenas as 10 primeiras linhas / números mais altos. Como posso fazer isso?

Tentei adicionar "WHERE ROWNUM <= 10" na parte inferior, sem sucesso.

SELECT customer.company_name, COUNT (item.pickup_reference) as "Number of Pickups"
FROM customer
JOIN item ON (customer.reference_no=item.pickup_reference)
GROUP BY customer.company_name, item.pickup_reference
ORDER BY COUNT (customer.company_name) DESC;

Obrigado por qualquer ajuda!

Respostas:

3 para resposta № 1

Você precisa fazer uma subconsulta para que o rownum funcione.

SELECT *
FROM
(
SELECT customer.company_name, COUNT (item.pickup_reference) as "Number of Pickups"
FROM customer
JOIN item ON (customer.reference_no=item.pickup_reference)
GROUP BY customer.company_name, item.pickup_reference
ORDER BY COUNT (customer.company_name) DESC
)
WHERE rownum <= 10

Você também pode usar funções de classificação, mas dada a relativa simplicidade disso, não tenho certeza se o faria.


1 para resposta № 2

A solução usando a classificação é mais ou menos assim:

select customer.company_name, COUNT (item.pickup_reference) from (
select distinct customer.company_name, COUNT (item.pickup_reference) ,
rank() over ( order by count(item.pickup_reference) desc) rnk
from customer
JOIN item ON (customer.reference_no=item.pickup_reference)
group by customer.company_name, item.pickup_reference
order by COUNT (customer.company_name) )
where rnk < 10

Usar o "rownum" para obter o resultado superior nãodê o resultado esperado, porque obtém as 10 primeiras linhas que não foram ordenadas e, em seguida, ordene-as (notifique isso em um comentário sobre a resposta de Andrew, não tenho o direito de adicionar o comentário).