我有一个数据集,其中字段有NULL
作为有效值。当我想在MySQL中使用ROLLUP
运算符时,这会导致出现问题,因为我无法区分它作为小计/总计的一部分生成的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;
这为我提供了下表:
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
对于我
答案 0 :(得分:2)
一个选项是使用子查询进行换行,该子查询首先替换指示缺失数据的实际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
以外的任何占位符。