NULLIF
是一個(gè) SQL 函數(shù),用于將兩個(gè)表達(dá)式進(jìn)行比較,如果它們相等,則返回 NULL
值;如果不相等,則返回第一個(gè)表達(dá)式的值。在查詢中,NULLIF
可以影響查詢結(jié)果的顯示方式,特別是在涉及到聚合函數(shù)(如 SUM
、AVG
等)時(shí)。
以下是一些使用 NULLIF
影響查詢結(jié)果的示例:
避免除以零錯(cuò)誤:
當(dāng)計(jì)算平均值時(shí),如果分母為零,結(jié)果將是未定義的。使用 NULLIF
可以避免這種情況,將零值轉(zhuǎn)換為 NULL
,從而在聚合函數(shù)中得到更清晰的結(jié)果。
SELECT AVG(NULLIF(sales, 0)) AS avg_sales
FROM sales_table;
在這個(gè)例子中,如果 sales
列中有零值,NULLIF
會(huì)將其轉(zhuǎn)換為 NULL
,然后 AVG
函數(shù)會(huì)忽略這些 NULL
值并返回其他銷售值的平均數(shù)。
篩選空值:
有時(shí)你可能希望排除包含空值的行。雖然 NULLIF
本身不直接用于篩選空值,但你可以結(jié)合使用 IS NULL
或 IS NOT NULL
條件來實(shí)現(xiàn)這一點(diǎn)。
SELECT *
FROM employees
WHERE NULLIF(department_id, 5) IS NOT NULL;
這個(gè)查詢將返回 department_id
不等于 5 的所有員工記錄。
條件聚合:
你可以使用 NULLIF
在聚合函數(shù)中實(shí)現(xiàn)條件邏輯。例如,你可以為每個(gè)部門計(jì)算總銷售額,但只顯示銷售額超過某個(gè)閾值的部分。
SELECT department_id, SUM(NULLIF(sales, 0)) AS total_sales
FROM sales_table
GROUP BY department_id
HAVING SUM(NULLIF(sales, 0)) > 1000;
這個(gè)查詢將返回每個(gè)部門總銷售額超過 1000 的記錄。
請(qǐng)注意,NULLIF
只是改變了查詢結(jié)果中的某些值,而不是改變查詢的邏輯或結(jié)構(gòu)。它主要用于在結(jié)果集中插入 NULL
值,以便更清晰地表示缺失或未定義的數(shù)據(jù)。