计算mysql中的数量*单价之和

计算mysql中的数量*单价之和,mysql,Mysql,我想我错过了一个简单的步骤,但我似乎无法理解。我读过其他的文章,他们谈到了分组,但我似乎不能把它们全部放在一起 我有一个保存库存事务的简单表。每一行都有数量和价格。我想得到数量和每个价格的总和,每个数量 这是我的问题。如果删除分组,则得到1个结果,该结果乘以表中的行数。如果我添加分组,我会多次得到正确的结果。我是不是遗漏了什么?我只是觉得在所有结果都包含相同数据的情况下,运行一个查询以获得20k个结果是毫无意义的 SELECT (SUM(i.quantity) - IFNULL(SUM(s.qu

我想我错过了一个简单的步骤,但我似乎无法理解。我读过其他的文章,他们谈到了分组,但我似乎不能把它们全部放在一起

我有一个保存库存事务的简单表。每一行都有数量和价格。我想得到数量和每个价格的总和,每个数量

这是我的问题。如果删除分组,则得到1个结果,该结果乘以表中的行数。如果我添加分组,我会多次得到正确的结果。我是不是遗漏了什么?我只是觉得在所有结果都包含相同数据的情况下,运行一个查询以获得20k个结果是毫无意义的

SELECT (SUM(i.quantity) - IFNULL(SUM(s.quantity), 0)) AS quantity,
SUM(i.unitprice * i.quantity) AS totalprice

FROM 02_01_transactions t

LEFT JOIN 02_01_transactions i
ON i.type = 1
AND i.active = 1

LEFT JOIN 02_01_transactions s
ON s.type = 2
AND s.active =1

GROUP BY t.id

不确定是否需要联接(您没有在任何公共值上联接)或type=2行(如果您只是将它们减去)。是否有以下不起作用的原因

-- Total quantity, total price of all type 1, active transactions.

SELECT SUM(quantity) AS quantity,
       SUM(unitprice * quantity) AS totalprice
FROM   02_01_transactions
WHERE  type   = 1
AND    active = 1

以下是我对您试图实现的目标的猜测:

select
    sum(quantity * case type when 1 then 1 when 2 then -1 end) as quantity,
    sum(unitprice * quantity) as totalprice
from 02_01_transactions
where type in (1, 2) and active = 1

你的连接肯定是错的。您是否正在尝试进行某种筛选并对类型2事务应用负号?我猜20k的交易量比你预期的要多得多。你为什么要加入同一个表?难道一个由一组人组成的select不足以给出你的结果吗?根据您发布的查询,我认为没有必要使用这些联接,似乎它们是您多次获得正确结果的原因。+1我怀疑OP可能还想“否定”totalprice计算中type=2行的数量。@spencer7593我对另一个答案做了类似的评论(然后将其删除)我同意,并决定OP可能会这样写,如果这是目的的话。