【问题标题】:Selecting top results from SQL Count query, including table join - Oracle从 SQL Count 查询中选择最佳结果,包括表连接 - Oracle
【发布时间】:2012-10-28 17:05:43
【问题描述】:
我目前有这个查询,它按降序选择最高的“取件数量”。我只需要过滤前 10 行/最高的数字。我怎样才能做到这一点?
我尝试在底部添加“WHERE ROWNUM
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;
感谢您的帮助!
【问题讨论】:
标签:
sql
oracle
join
filter
count
【解决方案1】:
您需要对其进行子查询才能使 rownum 起作用。
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
您也可以使用排名函数,但考虑到它相对简单,我不确定我是否会这样做。
【解决方案2】:
使用排名的解决方案是这样的:
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
使用 'rownum' 来获得最高结果并没有给出预期的结果,因为它获得了前 10 行未排序的前 10 行,然后对它们进行排序(请在评论 Andrew 的回复时通知这一点,我不无权添加评论)。