甚至与group by相同的结果的多个

时间:2013-11-26 21:10:30

标签: sql oracle

好的,我说有'product_catalog'和'orders'表。每个订单都有product_catalog_id作为外键。我想要返回的是查询结果是product_code(与特定product_catalog_id相关联的产品的名称)+每个product_code的订购数量。这很容易用这样的东西(Oracle SQL):

SELECT pc.product_code,
COUNT(*) as count
FROM orders o
join product_catalog pc on pc.product_catalog_id = o.product_catalog_id
GROUP BY pc.product_code
ORDER BY count DESC;

但我还要打印订单表中的各种信息,例如该product_code的所有月费的总和。用这样的东西看起来很容易:

(o.monthly_base_charge*count(*)) as "Monthly Fee"

但问题是,随着时间的推移,同一product_code会有不同的月费。如果我添加上面的行并将'o.monthly_base_charge'添加到group by语句中,那么它将为该product_code的每个定价变体打印出一个唯一的行。如何让它忽略这些价格变化,并将每个条目与产品代码相加?

2 个答案:

答案 0 :(得分:0)

有点不清楚你在问什么。我最好的猜测是你想要每月基本费用的总和:

SELECT pc.product_code,
       COUNT(*) as count,
       sum(o.monthly_base_charge) as "Monthly Fee"
FROM orders o join
     product_catalog pc
     on pc.product_catalog_id = o.product_catalog_id
GROUP BY pc.product_code
ORDER BY count DESC;

我不确定这是不是你想要的。如果同一个月的同一产品有两个订单,会发生什么?

答案 1 :(得分:0)

您可能需要执行类似的操作,因为SQL无法知道按月计算的每月基本费用。

SELECT pc.product_code,
    COUNT(*) as count,
    (min(o.monthly_base_charge)*count(*)) as "Monthly Fee"
FROM orders o
join product_catalog pc on pc.product_catalog_id = o.product_catalog_id
GROUP BY pc.product_code
ORDER BY count DESC;

或者你需要将o.monthly_base_charge添加到组中,以便sql知道如何确定count()

GROUP BY pc.product_code, o.monthly_base_charge