当某些列包含NULL值

时间:2017-05-17 12:31:56

标签: mysql sql rollup

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

1 个答案:

答案 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以外的任何占位符。