You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 22:47:43