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


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

在使用 group by某列名進行分組統計時,該列名的數據有些為 null, 因而會出現 null 的數據行全部分成一組導致數據錯誤,所以 null 列名的數據行不能執行 group by

IFNULL() 函數和 UUID() 函數

網上有類似的解決方案,通過IFNULL()函數搭配UUID()函數即可解決。

1、IFNULL() 函數

IFNULL() 函數用於判斷第一個表達式是否為 NULL,如果為 NULL 則返回第二個參數的值,如果不為 NULL 則返回第一個參數的值。

格式如下:

IFNULL(expression, alt_value)
-- 即可以是列名
IFNULL(user.id, "hahha")
-- 也可以是具體的值
IFNULL(null, "hahha")

image-20201214111856130

2、UUID() 函數

UUID()函數是可以生成時間上獨一無二的值。

select UUID()

image-20201214112729830

3、結合使用

因此,在 group by 后使用這兩個函數的格式可以如下

group 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;

效果截圖如下

image-20201214114003055

至此,問題解決。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM