【问题标题】:Grouping or Counting after a Sum求和后的分组或计数
【发布时间】:2014-03-18 19:14:31
【问题描述】:

使用 Oracle/SQL,我正在寻找一种方法来计算在总和之后高于或低于指定值的不同 ID 的数量。例如,我需要找出去年有多少客户订购了 1,000 美元或更多的商品,无论是一个大订单还是几个小订单。我不需要具体识别每个客户,只需找到超过此数量的客户总数即可。

到目前为止,我能够找到以下订单的总数:

select sum (Order_Amount), Customer_ID from table.orders_placed where year = 2013 group by Customer_ID order by Customer_ID

我也可以这样做:

select count (dinstinct Customer_ID)
from(
    select sum (Order_Amount), Customer_ID
    from table.orders_placed
    where year = 2013
    group by Customer_ID
    order by Customer_ID
    )

但这只是给了我不同 Customer_ID 的总数。我添加的任何其他参数试图缩小“计数”给我的范围都会导致错误。如何指定我想要的 Order_Amount 总额为 1,000 美元或更多?

【问题讨论】:

  • 我会考虑一个子查询。
  • 我没有意识到 ORACLE 与 MySQL 有多么相似
  • 为什么不使用HAVING
  • 您是否尝试为聚合列提供别名,然后使用该别名进行过滤?

标签: sql oracle


【解决方案1】:

尝试(无需在内部查询中排序)

select count (dinstinct Customer_ID)
from(
   select sum (Order_Amount) total_order_amount, Customer_ID
   from table.orders_placed
   where year = 2013
   group by Customer_ID
) where total_order_amount > 1000

OR 与有

   select sum (Order_Amount) total_order_amount, Customer_ID
   from table.orders_placed
   where year = 2013
   group by Customer_ID
   having sum(order_amount) > 1000

【讨论】:

    【解决方案2】:

    使用HAVING 子句来限制分组的结果:

    select sum (Order_Amount) as Total, Customer_ID
    from table.orders_placed
    where year = 2013
    group by Customer_ID
    having sum (Order_Amount) >= 1000
    

    然后您可以将其用作子查询来执行聚合和过滤。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-12
      • 2017-01-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多