1. 程式人生 > 實用技巧 >MySQL groud by 不對 null 進行分組統計

MySQL groud by 不對 null 進行分組統計

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;

效果截圖如下

至此,問題解決。