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
.
我有一个数据集,其中字段将 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
.