MySQL groud by 不對 null 進行分組統計
阿新 • • 發佈:2020-12-14
MySQL groud by 不對 null 進行分組統計
在使用 groud by
某列名進行分組統計時,該列名的資料有些為 null, 因而會出現 null 的資料行全部分成一組導致資料錯誤,所以 null 列名的資料行不能執行 groud by
IFNULL() 函式和 UUID() 函式
網上有類似的解決方案,通過IFNULL()
函式搭配UUID()
函式即可解決。
1、IFNULL() 函式
IFNULL()
函式用於判斷第一個表示式是否為 NULL,如果為 NULL 則返回第二個引數的值,如果不為 NULL 則返回第一個引數的值。
格式如下:
IFNULL(expression, alt_value) -- 即可以是列名 IFNULL(user.id, "hahha") -- 也可以是具體的值 IFNULL(null, "hahha")
2、UUID() 函式
UUID()
函式是可以生成時間上獨一無二的值。
select UUID()
3、結合使用
因此,在 groud by
後使用這兩個函式的格式可以如下
groud by IFNULL('列名', UUID())
部分的sql語句如下,如果合同編碼為空,則不進行分組。
SELECT c.code as '合同編碼', a.contract_money AS '合同總額', a.maintain_money AS '維護費金額', sum(a.actual_money) AS '已收款金額' FROM finance_contract_receipt a LEFT JOIN business_customer b ON b.id = a.customer_id LEFT JOIN finance_contract c ON c.id = a.contract_id LEFT JOIN base_type d ON d.id = a.type GROUP BY IFNULL(c.code, UUID()) ORDER BY STR_TO_DATE(c.contract_date, '%Y-%m-%d') ASC;
效果截圖如下
至此,問題解決。