答案:SQL中通過CASE與聚合函數(shù)結(jié)合實現(xiàn)條件統(tǒng)計,如COUNT(CASE WHEN...)統(tǒng)計滿足條件的行數(shù),SUM(CASE WHEN...THEN值ELSE 0 END)對符合條件的數(shù)據(jù)求和,并可使用多條件CASE進行分類匯總,提升查詢效率。
SQL 聚合函數(shù)結(jié)合條件聚合,通常使用 CASE 表達式嵌套在聚合函數(shù)內(nèi)部,實現(xiàn)對不同條件的數(shù)據(jù)分別統(tǒng)計。這種方式可以在一個查詢中返回多個條件下的匯總結(jié)果,而無需多次查詢或連接。
COUNT(CASE WHEN 條件 THEN 1 END) 只會對滿足條件的行計數(shù),不滿足的返回 NULL,而 COUNT 不統(tǒng)計 NULL 值。
例如:統(tǒng)計某個訂單表中“已完成”和“已取消”的訂單數(shù)量:SELECT COUNT(CASE WHEN status = 'completed' THEN 1 END) AS completed_count, COUNT(CASE WHEN status = 'canceled' THEN 1 END) AS canceled_count FROM orders;
SUM(CASE WHEN 條件 THEN 值 ELSE 0 END) 是常見寫法,確保不滿足條件時加 0,避免遺漏。
示例:按用戶統(tǒng)計收入,區(qū)分新老客戶:SELECT user_id, SUM(CASE WHEN is_new = 1 THEN amount ELSE 0 END) AS new_customer_revenue, SUM(CASE WHEN is_new = 0 THEN amount ELSE 0 END) AS existing_customer_revenue FROM sales GROUP BY user_id;
比如:按成績等級統(tǒng)計學(xué)生人數(shù):
SELECT COUNT(CASE WHEN score >= 90 THEN 1 END) AS A_grade, COUNT(CASE WHEN score >= 80 AND score < 90 THEN 1 END) AS B_grade, COUNT(CASE WHEN score >= 70 AND score < 80 THEN 1 END) AS C_grade, COUNT(CASE WHEN score < 70 THEN 1 END) AS F_grade FROM students;
例如:按部門統(tǒng)計男女性員工的平均工資:
SELECT department, AVG(CASE WHEN gender = 'M' THEN salary END) AS avg_male_salary, AVG(CASE WHEN gender = 'F' THEN salary END) AS avg_female_salary FROM employees GROUP BY department;
基本上就這些。通過在聚合函數(shù)中嵌套 CASE 表達式,能靈活實現(xiàn)各種條件統(tǒng)計,是 SQL 數(shù)據(jù)分析中的常用技巧。關(guān)鍵在于理解聚合函數(shù)如何處理 NULL 值,并合理設(shè)計 CASE 的返回值。
以上就是SQL 聚合函數(shù)如何結(jié)合條件聚合?的詳細內(nèi)容,更多請關(guān)注php中文網(wǎng)其它相關(guān)文章!
每個人都需要一臺速度更快、更穩(wěn)定的 PC。隨著時間的推移,垃圾文件、舊注冊表數(shù)據(jù)和不必要的后臺進程會占用資源并降低性能。幸運的是,許多工具可以讓 Windows 保持平穩(wěn)運行。
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號