答案:SQL中通过在聚合函数内嵌套CASE WHEN实现条件聚合,可在一个查询中对不同条件的数据分别计数、求和或计算平均值等。例如统计每个客户的总订单数、已完成订单金额、待处理订单数及平均完成订单金额,相比多次查询或子查询更高效灵活。解析:COUNT(order_id)统计总订单;SUM(CASE WHEN status='completed' THEN amount ELSE 0 END)累加已完成订单金额,ELSE 0确保未完成订单贡献为零;COUNT(CASE WHEN status='pending' THEN 1 END)利用COUNT忽略NULL的特性,仅统计待处理订单;AVG(CASE WHEN status='completed' THEN amount END)自动忽略NULL,只计算已完成订单的平均金额。与WHERE子句只能前置过滤整行不同,CASE WHEN在聚合时按行进行条件判断,允许同一行数据参与多个条件分支的聚合,实现“横向多维分析”。常见陷阱包括NULL处理不当导致结果偏差(如AVG中误用ELSE 0)、复杂CASE逻辑影响性能、数据类型不匹配引发隐式转换错误。此外,MAX/MIN可用于提取符合条件的极值,STRING_AGG结合CASE可拼接特定状态的字符串,VAR/STDEV类函数支持条件统计分析,APPROX_COUNT_DISTINCT适用于大数据下的条件去重估算。该技术提升了SQL的表达能力,是构建复杂报表

SQL聚合函数与
CASE WHEN
WHERE
在SQL中,
CASE WHEN
COUNT
SUM
AVG
MAX
MIN
举个例子,假设我们有一个
orders
order_id
customer_id
amount
status
order_date
SELECT
customer_id,
COUNT(order_id) AS total_orders,
SUM(CASE WHEN status = 'completed' THEN amount ELSE 0 END) AS completed_sales_amount,
COUNT(CASE WHEN status = 'pending' THEN 1 END) AS pending_orders_count,
AVG(CASE WHEN status = 'completed' THEN amount END) AS avg_completed_order_amount -- 注意这里对NULL的处理
FROM
orders
GROUP BY
customer_id
ORDER BY
customer_id;解析:
COUNT(order_id)
SUM(CASE WHEN status = 'completed' THEN amount ELSE 0 END)
status
CASE WHEN
amount
0
SUM
ELSE 0
ELSE NULL
SUM
NULL
COUNT(CASE WHEN status = 'pending' THEN 1 END)
status
CASE WHEN
1
NULL
COUNT(expression)
NULL
AVG(CASE WHEN status = 'completed' THEN amount END)
COUNT
CASE WHEN
NULL
AVG
NULL
AVG(CASE WHEN status = 'completed' THEN amount ELSE 0 END)
通过这种方式,我们可以在一个查询中,为每个客户生成一份包含多种条件聚合信息的报告,大大提升了查询效率和结果的可读性。
这确实是个常见的问题,很多人在刚接触SQL时都会尝试用
WHERE
WHERE
WHERE
想象一下,你想要统计一个部门里,男员工和女员工各自的平均薪资,并且希望这两个数字显示在同一行报表里。如果使用
WHERE
WHERE gender = 'Male'
WHERE gender = 'Female'
而
CASE WHEN
在实际操作中,这种强大的组合也并非没有需要注意的地方。就像任何工具一样,用得好能事半功倍,用不好也可能带来一些麻烦。
SUM
AVG
ELSE 0
ELSE NULL
ELSE
ELSE NULL
SUM
NULL
0
AVG
NULL
0
NULL
0
AVG(CASE WHEN status = 'completed' THEN amount END)
SUM(CASE WHEN status = 'completed' THEN amount ELSE 0 END)
CASE WHEN
CASE WHEN
CASE WHEN
OR
UNION
JOIN
CASE WHEN
WHEN
CASE WHEN
CASE WHEN
THEN
ELSE
CASE WHEN
COUNT
SUM
AVG
AVG(CASE WHEN condition THEN value END)
MAX
MIN
MAX(CASE WHEN product_category = 'Electronics' THEN price END)
MIN(CASE WHEN order_status = 'pending' THEN order_date END)
STRING_AGG
GROUP_CONCAT
STRING_AGG(CASE WHEN status = 'completed' THEN product_name END, ', ')
VAR_POP
VAR_SAMP
STDEV_POP
STDEV_SAMP
CASE WHEN
STDEV_SAMP(CASE WHEN product_category = 'Clothing' THEN amount END)
APPROX_COUNT_DISTINCT
APPROX_COUNT_DISTINCT(CASE WHEN country = 'USA' THEN customer_id END)
总的来说,
CASE WHEN
NULL
以上就是SQL 聚合函数和 CASE WHEN 多条件使用怎么写?的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号