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

如何用单条SELECT语句筛选b列最大值对应a列的最小值?

在单条SELECT语句中筛选列b取最大值时列a的最小值

需要用单条SELECT语句,找出当列b(整数)取最大值时,列a(整数)的最小值。

你尝试的错误代码

SELECT MIN(a) OVER (PARTITION BY MAX(b)) as res -- 语法不合法
FROM table

错误原因:窗口函数的PARTITION BY子句不能直接使用聚合函数MAX(b),分区字段需为表中已存在的列或确定表达式,无法直接基于动态聚合结果分区。

示例数据

ab
11
13
23

预期返回结果

res
1

可行解法

解法1:子查询获取最大b,再筛选对应行的最小a

SELECT MIN(a) AS res
FROM your_table
WHERE b = (SELECT MAX(b) FROM your_table);

这是最通用的写法,几乎所有SQL数据库都支持:先通过子查询拿到全表b的最大值,再筛选出所有b等于该值的行,最后取这些行中a的最小值。

解法2:用窗口函数标记最大b的行,再取最小a

SELECT MIN(a) AS res
FROM (
    SELECT a, b, MAX(b) OVER () AS max_b
    FROM your_table
) AS sub
WHERE b = max_b;

内层通过窗口函数MAX(b) OVER ()计算全表b的最大值,外层筛选出b等于最大值的行,再取这些行的a最小值,整体属于单条SELECT语句(包含嵌套子查询)。

解法3:排序后取首行(适用于PostgreSQL、SQL Server等支持语法的数据库)

SELECT a AS res
FROM your_table
ORDER BY b DESC, a ASC
FETCH FIRST 1 ROW ONLY;

按b降序、a升序排序,取第一行的a值——因为b最大的分组里,a最小的行排在最前面,结果符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 05:25:25