【问题标题】: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 的回复时通知这一点,我不无权添加评论)。

      【讨论】:

        猜你喜欢
        • 2012-11-30
        • 1970-01-01
        • 1970-01-01
        • 2012-12-23
        • 2013-10-26
        • 1970-01-01
        • 1970-01-01
        • 2021-04-11
        • 2015-03-23
        相关资源
        最近更新 更多