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")
2、UUID() 函數
UUID()
函數是可以生成時間上獨一無二的值。
select UUID()
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;
效果截圖如下
至此,問題解決。