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

基于不同条件的SELECT MIN()/MAX()查询能否合并为单个查询?

当然可以合并成单个查询!

这种仅过滤条件不同的聚合查询,用条件聚合(Conditional Aggregation)就能轻松合并,而且还能提升查询效率——只需要扫描一次表,不用重复扫两次。

举个实际例子

假设你原来的两个查询是这样的:

-- 查询 birth 早于2000年的最小年龄
SELECT MIN(age) AS min_age_pre_2000 FROM users WHERE birth < '2000-01-01';

-- 查询 birth 晚于/等于2000年的最大年龄
SELECT MAX(age) AS max_age_post_2000 FROM users WHERE birth >= '2000-01-01';

合并后的高效查询

用CASE WHEN把过滤逻辑嵌入聚合函数里,就能在一次查询中同时得到两个结果:

SELECT
  MIN(CASE WHEN birth < '2000-01-01' THEN age END) AS min_age_pre_2000,
  MAX(CASE WHEN birth >= '2000-01-01' THEN age END) AS max_age_post_2000
FROM users;

原理说明

  • 当birth满足对应条件时,CASE返回目标字段值;不满足时返回NULL
  • 聚合函数(MIN/MAX)会自动忽略NULL值,所以最终结果和分开查询完全一致
  • 这种写法是标准SQL,支持MySQL、PostgreSQL、SQL Server、Oracle等所有主流数据库

额外选项:如果需要分两行返回结果

如果你希望结果和原查询一样分成两行展示,也可以用UNION ALL实现,但这种方式会扫描两次表,效率不如条件聚合,仅在格式需求特殊时使用:

SELECT 'pre_2000' AS group_type, MIN(age) AS value FROM users WHERE birth < '2000-01-01'
UNION ALL
SELECT 'post_2000' AS group_type, MAX(age) AS value FROM users WHERE birth >= '2000-01-01';

内容的提问来源于stack exchange,提问作者Toleo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:29:45