MySQL中如何为MAX()函数添加过滤条件(无需子查询)
在MySQL中为MAX()函数单独设置过滤条件的方案
当然可以实现你的需求,而且完全不需要子查询——用条件聚合函数就能轻松搞定,这也是MySQL里处理这类场景的常用技巧。
你想要统计全量记录数的同时,只计算date_of_death为NULL的记录中的最大age,只需要在MAX()里嵌套一个CASE语句即可:
SELECT COUNT(1) AS total_records, MAX(CASE WHEN date_of_death IS NULL THEN age END) AS max_alive_age FROM person;
原理说明:
COUNT(1)会统计表中所有的记录数,不受任何条件限制,满足你“全量统计”的需求;CASE WHEN date_of_death IS NULL THEN age END会对每一行做判断:如果date_of_death是NULL,就保留该行的age值,否则返回NULL;- 而
MAX()函数的特性是自动忽略NULL值,所以最终只会计算那些date_of_death为NULL的行的age最大值。
这种方式不仅简洁,而且性能也很出色,因为只需要扫描一次表就能完成两个统计目标,避免了子查询可能带来的额外开销。其实不止MAX(),像SUM()、AVG()这类聚合函数都可以用同样的方式添加过滤条件,用来在同一个查询中完成多维度的聚合统计。
内容的提问来源于stack exchange,提问作者user13039345
相关产品推荐
相关产品推荐

