好的,我说有'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的每个定价变体打印出一个唯一的行。如何让它忽略这些价格变化,并将每个条目与产品代码相加?
答案 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