【问题标题】:How to find sales group by pack_id如何通过 pack_id 查找销售组
【发布时间】:2013-12-16 03:43:15
【问题描述】:

以下是我们用于处理的数据: - 我们知道包裹 ID 和每个包裹 ID 的价格 - 这意味着我们可以通过将计数 (pack_id_ 与包裹的单个价格相乘) 来找到销售额 - 我们知道 package_id 在订阅表中找到,pack_price 在价格表中找到 - 我们应该返回按 pack_id 排序的值。

SELECT Count(pack_id) * pack_price 
FROM   package 
       natural JOIN subscription 
GROUP  BY pack_id 

【问题讨论】:

  • 你能具体说明你得到的结果是什么吗?它们与您的预期有何不同?
  • 我们收到以下错误消息: ORA-00979: not a GROUP BY expression 我们期望的结果是:左侧所有包 ID 的列表,总销售额为它们在右侧的列中。换句话说:任何一天的销售摘要,按包裹类型分类
  • (我们还需要某种 where date = ... 子句,但我们只是想让这个查询的第一部分工作。我们认为我们会尝试通过 pack_id 之前获得销售额将其限制在特定日期)

标签: sql oracle group-by subquery


【解决方案1】:

我认为您收到错误消息是因为您使用 count(pack_id) 与价格相乘,这会导致 group by 中的聚合错误。

解决这个问题的方法是使用 ;with 创建一个组合查询:

WITH
count_packid AS 
   ( select 
     count(pack_id) as packcount, pack_id from package group by pack_id),
sales_price AS
  (
    select pack_price, pack_id
    from subscription
  )
SELECT packcount * pack_price, a.pack_id
FROM count_packid a
LEFT JOIN sales_price b on a.pack_id = b.pack_id

这样您就可以解决直接在计算中使用聚合函数的问题,并且您应该得到您需要的结果。不幸的是,我无法对此进行测试,但它应该可以帮助您朝着正确的方向前进。

如果您想包含日期或类似内容,则必须将 WHERE 子句添加到相应的子查询(即 count_packid)

希望这会有所帮助。

【讨论】:

  • 非常感谢这个有用的答案!
【解决方案2】:

我已修改 JanR 查询,请注意更改

WITH
count_packid AS 
   ( select 
     count(pack_id) as packcount, pack_id from package group by pack_id),

SELECT packcount * pack_price, a.pack_id
FROM count_packid a
Inner JOIN subscription b on a.pack_id = b.pack_id

【讨论】:

  • 非常感谢您的帮助:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-07
  • 1970-01-01
  • 2012-01-08
  • 2016-02-24
  • 1970-01-01
相关资源
最近更新 更多