MySQL查询减去两组值

标签 mysql performance return subtraction

我有一张“发票明细”表,我想获取商品# 的 net_sales,这可以通过从返回中减去销售额来实现。

问题是:我可以通过获取 type = 'S' 的 SUM(qty) 和 SUM(qty ) 的 type = 'R' 然后减去它们以获得 item# 的 net_sales?还有,如果有不止一个项目#需要获得 net_sales?

+------+------+------+
| Item |  Qty | Type |
+------+------+------+
| 1132 |  1   |  S   |
| 1132 |  2   |  S   |
| 1132 |  3   |  R   |
+------+------+------+

我所做的是在查询中选择第一组“S”,然后在另一个查询中选择第二组“R”,然后减去它们,如果要处理的项目#很多,这会导致性能不足!

最佳答案

如果您以不同的方式表述问题,这将变得容易:不是 SUM() 计算所有 S,然后减去所有 R 你也可以计算所有项目的总和,R 是负数的标记:

SELECT
  `Item`,
  SUM(IF(`Type`='S', `Qty`, -1*`Qty`)) AS total
FROM
  `invoice_details`
WHERE
  -- your criteria here, e.g.
  `Item`=1132
GROUP BY `Item`

关于MySQL查询减去两组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25634019/

相关文章:

MySQL - 如果 id 存在于另一个表中,则插入字段

java - Scala foreach 返回

php - 如何将 MarkerClusterer 添加到我的谷歌地图

sql-server - 为什么 UPDATE 比 SELECT 花费的时间长得多?

C# List<T>.ToArray 性能不好?

performance - Elasticsearch Spring Data 和 Elasticsearch HighLevelClient 复杂聚合的性能

java - 返回类的副本

c# - 在 C# 中编码一个 unsigned char * 从 dll 返回的函数

php - 在 MySQL 中存储 0.00001

php - 将 mysqli 结果存储到数组中,然后用 while 循环打印它