如何用SQL获取fz_1最小值对应的ry_1最大值?
解决方法
你需要的是关联两列的逻辑:先锁定fz_1取最小值的所有行,再从中找ry_1的最大值,以下几种SQL写法都能实现:
方法一:子查询过滤(最直观)
先通过子查询得到fz_1的最小值,再筛选出所有fz_1等于该值的行,最后取ry_1的最大值:
SELECT MAX(ry_1) AS max_ry_at_min_fz FROM your_table WHERE fz_1 = (SELECT MIN(fz_1) FROM your_table);
方法二:分组后过滤
按fz_1分组,筛选出分组后fz_1等于全局最小值的组,同时返回该组的ry_1最大值(还能看到对应的fz_1最小值):
SELECT fz_1 AS min_fz, MAX(ry_1) AS max_ry_at_min_fz FROM your_table GROUP BY fz_1 HAVING fz_1 = (SELECT MIN(fz_1) FROM your_table);
方法三:窗口函数实现
用窗口函数先给每行标记全局的fz_1最小值,再筛选出符合条件的行并取ry_1最大值:
SELECT MAX(ry_1) AS max_ry_at_min_fz FROM ( SELECT ry_1, fz_1, MIN(fz_1) OVER() AS global_min_fz FROM your_table ) AS sub_query WHERE fz_1 = global_min_fz;
为什么你的原语句不行?
SELECT min(fz_1), max(ry_1)是分别计算整个表中fz_1的最小值和ry_1的最大值,两者没有任何关联,自然得不到你想要的结果。
内容的提问来源于stack exchange,提问作者Joseph K
相关产品推荐
相关产品推荐

