Mysql IFNULL 在多个 SELECT 查询中只工作一次

Mysql IFNULL working only once in a multiple SELECT query

我正在尝试使用 MySQL 查询构建月份图形。我正在使用 UNION 命令检查单个查询中每个月的 table 中有多少行。以下为 3 个月的示例:

$query =
"SELECT IFNULL((SELECT SUM(score) FROM statistics WHERE MONTH(date) = 1), 0) AS total UNION
 SELECT IFNULL((SELECT SUM(score) FROM statistics WHERE MONTH(date) = 2), 0) AS total UNION
 SELECT IFNULL((SELECT SUM(score) FROM statistics WHERE MONTH(date) = 3), 0) AS total";

$stats_query = mysqli_query ($db_connection, $query);

  $result = "";
  while ($row = mysqli_fetch_assoc($stats_query)) {
    $result .= $row['total'].",";
  }
  echo ($result);

// OUTPUT: 0,176,68,

如您所见,我告诉 mysql 给我 return 一个“0”,以防那个月没有行(一月份就是这种情况)。

那个查询总共有12个SELECTS(我只复制了3个保存space),每个月一个。有些月份会 return 一个值,有些则不会(然后 IFNULL 应该将其转换为“0”)。 对于所有 12 个月,我的最终输出应该如下所示:

// OUTPUT: 0,176,68,0,0,0,0,0,12,15,176,43,

但是...如果有多个 SELECT return 没有行,则查询不会向结果添加另一个“0”。我的最终结果是这样的:

// OUTPUT: 0,176,68,12,15,176,43,

好像IFNULL只执行了一次,即使他出现在所有12个SELECTS...

我是不是做错了什么?谁能发现我的代码中的错误或其他错误?

谢谢!

使用UNION ALL代替UNION得到所有结果:

 SELECT IFNULL((SELECT SUM(score) FROM statistics WHERE MONTH(date) = 1), 0) AS total UNION ALL
 SELECT IFNULL((SELECT SUM(score) FROM statistics WHERE MONTH(date) = 2), 0) AS total UNION ALL
 SELECT IFNULL((SELECT SUM(score) FROM statistics WHERE MONTH(date) = 3), 0) AS total

UNION returns 仅 DISTINCT 行。

来自doc

The default behavior for UNION is that duplicate rows are removed from the result.