2017-05-17 56 views
1

我有一個數據集,它對於將NULL作爲有效值的字段有點常見。當我想在MySQL中使用ROLLUP運算符時,這會引起問題,因爲我無法區分它作爲其小計/總計的一部分生成的NULL值與數據中實際的NULL值。當某些列包含NULL值時,彙總MySQL數據集

我當前的查詢如下:

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對我來說很重要。

回答

2

一種選擇是用子查詢打包,該子查詢首先替換表示缺失數據的實際NULL值。然後,使用COALESCE()因爲你是用字符串"Total"以取代從彙總的NULL

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

+0

這很好用!唯一的問題是它會爲我創建更多的工作,因爲我正在動態創建SQL,但這是一個很好的問題。謝謝! – koend