首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 將 NULL 轉為 0 的多種寫法與效能比較

     編輯:MySQL 資料庫相關知識

場景

聚合函數(AVG、SUM、COUNT)在無符合條件資料時回傳 NULL,應用層常需轉為 0 顯示或參與運算。

寫法一:IF 判斷(標準 SQL,可讀性佳)

SELECT IF(AVG(cai.conversionsRate) IS NULL, 0, AVG(cai.conversionsRate)) AS conversionsRate
FROM campaign_info cai
WHERE insertTime BETWEEN '2011-02-01' AND '2011-02-04'
  AND googleCampaignId = 23331401;

寫法二:COALESCE(ANSI 標準,支援多參數)

SELECT COALESCE(AVG(cai.conversionsRate), 0) AS conversionsRate
FROM campaign_info cai
WHERE insertTime BETWEEN '2011-02-01' AND '2011-02-04'
  AND googleCampaignId = 23331401;

優點:標準 SQL,可鏈式 COALESCE(col1, col2, 0) 取第一個非 NULL 值。

寫法三:IFNULL(MySQL 專用,兩參數)

SELECT IFNULL(AVG(cai.conversionsRate), 0) AS conversionsRate
FROM campaign_info cai
WHERE insertTime BETWEEN '2011-02-01' AND '2011-02-04'
  AND googleCampaignId = 23331401;

效能與建議

  • 三者執行計畫幾乎相同,優化器會內部重寫。
  • 推薦 COALESCE:可移植性最好,語意明確。
  • 避免在應用層(PHP/Java)做轉換,資料庫層完成更高效。

延伸:SUM/COUNT 的 NULL 處理

-- SUM 無資料回傳 NULL,建議 COALESCE
SELECT COALESCE(SUM(amount), 0) FROM orders WHERE ...;

-- COUNT 永不回傳 NULL(無資料回 0),無需轉換
SELECT COUNT(*) FROM orders WHERE ...;
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved