【问题标题】:mysql: how to sum multiplied partialsmysql:如何对相乘的部分求和
【发布时间】:2013-01-07 20:51:51
【问题描述】:

有如下表格:

已售商品:

code   | size   | quantity 
abc123 | small  | 4
abc123 | medium | 2  
xyz987 | small  | 3
xyz987 | medium | 1
xyz987 | large  | 2

价格表:

code   | size   | price 
abc123 | small  | 5
abc123 | medium | 7  
abc123 | large  | 9 
xyz987 | small  | 10
xyz987 | medium | 13
xyz987 | large  | 15

这将是您获得的最佳(更快的查询)方法

结果:

code   | sold_items | cash
abc123 | 6          | 34
xyz987 | 6          | 73

【问题讨论】:

  • +1 用于向我们展示表架构、示例数据和预期结果。很久没有看到这样的问题了:)
  • @bonCodigo:非常感谢! :)

标签: mysql sum multiplication


【解决方案1】:

这应该可行:

 SELECT si.code, SUM(si.quantity), SUM(si.quantity * pl.price) as cash
 FROM sold_items si
 INNER JOIN price_list pl ON pl.code = si.code AND pl.size = si.size
 GROUP BY si.code

【讨论】:

  • 为什么是子查询? GROUP BY si.code 没有派生表就足够了。
  • @Eric 当我创建一个要展示的小提琴时,你已经更快了;)
  • @ypercube - 你是对的,不知道为什么我认为子查询是必要的
  • 到目前为止给出的两个答案都有效,它们看起来与我非常相似。你们都为我指明了正确的方向,谢谢。
【解决方案2】:

请尝试一下。

代码:

select p.code, sum(p.quantity), sum(q.quantity * p.price)
from prc p
inner join 
qty q
on p.code = q.code
and p.size = q.size
group by p.code
;

结果:

CODE    SUM(Q.QUANTITY)     SUM(Q.QUANTITY * P.PRICE)
abc123      6                   34
xyz987      6                   73

【讨论】:

  • 只有加入prc -> qty时才需要左连接。如果您从qty 表开始并加入prc,那么内部连接就足够了。
  • @EricPetroelje 没错,这里无论是左侧还是内部都没有太大区别。我拿了它因为早些时候我实际上像计数(p.code);)然后我仔细检查了这个问题并意识到OP要求的是数量总和而不是计数......那是我错过了内部的左连接加入。
猜你喜欢
  • 1970-01-01
  • 2023-03-17
  • 2020-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
相关资源
最近更新 更多