如何通过pack_id查找销售组

时间:2013-12-16 03:43:15

标签: sql oracle group-by subquery

以下是我们处理的数据:   - 我们知道包裹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 

2 个答案:

答案 0 :(得分:0)

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

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

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)

希望这有帮助。

答案 1 :(得分:0)

我修改了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