【问题标题】:Multiple of same result even with group by即使使用 group by 也有多个相同的结果
【发布时间】:2013-11-26 21:10:29
【问题描述】:

好吧,假设我有一个“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;

但我还想打印订单表中的各种信息,例如该产品代码的所有每月费用总额。使用这样的东西似乎很容易:

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

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

【问题讨论】:

  • 你试过sum(o.monthly_base_charge) as "Monthly Fee"吗?
  • sum 在这种情况下似乎与 (o.monthly_base_chargecount()) 与“月费”完全相同
  • @halfbit 是的,抱歉,一旦我按声明从组中取出每月基本费用,这确实有效。不幸的是,我不能给你支票,因为它只是一个评论:/

标签: sql oracle


【解决方案1】:

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

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;

我不确定这是否正是您想要的。如果您在同一个月有两个相同产品的订单会怎样?

【讨论】:

  • 这是按月支付的费用,但我不需要做任何算术,比如下单后 5 个月,所以 5*该产品的数量*下单后的月数。我要计算的只是每月费用的当前收入。因此,如果数据库中有 500 个产品订单,无论何时下订单,我都会收取 500 * 基本费用。如果有 200 件产品以 1 次基本费用出售,300 件以另一种基本费用出售,则公式为(200*1 次产品基本费用)+(300*2 次产品基本费用)。是不是更清楚了?
  • 换句话说,特定订单的成本不会随时间变化,但产品的某些订单可能有一个价格,而其他订单可能有另一个价格。无论价格如何,我都需要将它们全部添加在一起并与 product_code 一起显示在一行中。
  • 实际上,是的,在我将它们从 group by 语句中删除后,这确实像我想要的那样工作。嗯,原始帖子的 cmets 中的半位实际上比您早 30 秒回答了,但这无法得到检查,所以,给您。
【解决方案2】:

您可能需要这样做,因为 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 添加到 group by 以便 sql 知道如何确定 count()

GROUP BY pc.product_code, o.monthly_base_charge

【讨论】:

  • 好吧,我不想要最低限度,所以我认为那部分不会起作用。每个订单都有与之相关的每月费用。我希望每个具有特定 product_code 的订单将该字段中的值加在一起并与产品代码一起显示在一行中
猜你喜欢
  • 1970-01-01
  • 2014-02-05
  • 1970-01-01
  • 2015-05-05
  • 2014-11-22
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 2017-10-06
相关资源
最近更新 更多