mysql - 为什么 MySQL 不将这些列相加?

标签 mysql

我有一个相当复杂的查询,我在此处对其进行了简化,以尝试使其易于理解。

在下面的示例中,我尝试获取两种不同产品的销售额的SUM。当我根据前两列单独检索 SUM 时,它们计算正确。

但是,当将两个 SUM 查询添加在一起时(在第三列中),如果产品 Y 已售出,但产品 X 已售出,则该值将返回完全空白。

有什么想法吗?

SELECT

  (
    SELECT SUM(IFNULL(product_x_sales.price, 0))
    FROM sales AS product_x_sales
    GROUP BY product_x_sales.customer_id
  ) AS "Total Sales of Product X",

  SUM(IFNULL(product_y_sales.price, 0)) AS "Total Sales of Product Y",

  (
    SELECT SUM(IFNULL(product_x_sales.price, 0))
    FROM sales AS product_x_sales
    GROUP BY product_x_sales.customer_id
  ) + (
    SUM(IFNULL(product_y_sales.price, 0))
  ) AS "Total Sales of Products X and Y"

FROM customers

JOIN sales AS product_y_sales ON customers.id = product_y_sales.customer_id

GROUP BY agents.id

最佳答案

当 X 没有销售额时,您的选择结果将为 NULL。 将 NULL 添加到 Y 的销售额将导致 NULL。

SELECT SUM(IFNULL(product_x_sales.price, 0))   <-- = NULL

改成这个

SELECT IFNULL(SUM(IFNULL(product_x_sales.price, 0)), 0)

关于mysql - 为什么 MySQL 不将这些列相加?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37883038/

相关文章:

c# - 无法从数据库 MySqL C# 获取图像

mysql - 如何转义整个 sql 字符串而不是转义每个参数?

MYSQL REGEX 搜索多个单词,无顺序条件

php - 加密/准备密码以插入数据库的最佳方法

mysql - 在 ms sql 中区分表中的串联列

php - cPanel 上的 Percona Server - 缺少 PHP 的 mysql 扩展

mysql - 在mysql中使用DATE_FORMAT进行分组

php - 向表中插入特定查询

mysql - Redis 连接到 my-redis :6379 failed - getaddrinfo ENOTFOUND when running seeds

mysql - str_to_date 在查询中返回 null 但它自己很好