MySQL 某些列包含 NULL 值时的汇总

MySQL rollup when some columns include NULL values

我有一个数据集,其中字段将 NULL 作为有效值有些常见。当我想在 MySQL 中使用 ROLLUP 运算符时,这会导致出现问题,因为我无法区分它作为其 subtotals/totals 的一部分生成的 NULL 值和数据中的实际 NULL 值。

我目前的查询如下:

SELECT
  COALESCE(car_score, "Total") AS car_score,
  COUNT(DISTINCT id) AS volume
FROM cars_table
GROUP BY
  car_score ASC WITH ROLLUP;

这为我提供了以下内容table:

cars_score   |  volume
---------------------------
Total        |  500
1            |  100
2            |  200
3            |  300
4            |  400
5            |  500
Total        |  2000

我希望的时间:

cars_score   |  volume
---------------------------
NULL         |  500
1            |  100
2            |  200
3            |  300
4            |  400
5            |  500
Total        |  2000

这是一个简单的示例,一旦 ROLLUP 具有多个维度,它就会变得更加令人沮丧。我不能只将之前的 NULL 值更改为其他值的原因是我还需要能够聚合应用程序其他部分中的数据,因此拥有适当的 NULL 很重要我。

一个选项是用一个子查询包装,该子查询首先替换指示缺失数据的实际 NULL 值。然后,使用 COALESCE() 将汇总中的 NULL 替换为字符串 "Total":

SELECT
    COALESCE(t.car_score, 'Total') AS car_score,
    COUNT(DISTINCT t.id) AS volume
FROM
(
    SELECT COALESCE(cars_score, 99) AS car_score, id
    FROM cars_table
) t
GROUP BY t.car_score WITH ROLLUP

这里我使用 99 作为占位符来表示缺少的汽车分数。您可以使用任何您想要的占位符,除了 NULL.