gpt4 book ai didi

MySQL查找具有字段最大值的行

转载 作者:行者123 更新时间:2023-11-30 23:44:37 25 4
gpt4 key购买 nike

我有一个复杂的 SELECT 查询,它返回如下信息:

+------+-------+--------+
| a | b | c |
+------+-------+--------+
| 2482 | 3681 | 58248 |
| 2482 | 17727 | 139249 |
| 2482 | 23349 | 170839 |
| 3031 | 14877 | 122921 |
| 3031 | 20691 | 156457 |
| 3031 | 20932 | 157784 |
+------+-------+--------+

并且我正在尝试找出如何针对每个 a 值仅返回具有 b 最大值的行。here中的解决方案看起来很有希望,但我无法让它工作,因为我的起点不是一个表而是一个查询(我猜是 View ),并且我得到一个错误

"ERROR 1146 (42S02): Table 'databasename.s' doesn't exist"

当我尝试以上述问题的方式引用子查询时:

select s.* from (SELECT blah blah complex) s where s.b = (select max(s2.b) from s s2 where s2.a = s.a);

我很确定这是一个半复杂的问题,但我已经花了好几个小时来解决这个问题,只是对它的理解不够深入,无法解决我的问题......

编辑:我应该澄清我想得到什么作为输出:

    +------+-------+--------+
| a | b | c |
+------+-------+--------+
| 2482 | 23349 | 170839 |
| 3031 | 20932 | 157784 |
+------+-------+--------+

MySQL 版本是 5.5.49 (Ver 14.14 Distrib 5.5.49)

更新:@Harshil 的回答澄清了我的尝试基本上是不可能的,所以我最终遵循了其他问题中的指导(由@Bill Karwin 的评论指导)并重写了我的原始查询以执行另一个 JOIN(针对子查询)哪个执行 max()。

最佳答案

别名 s 在子查询中不可见。所以你必须在子查询中重新编写它。还可以使用 group by 而不是 where 子句,如下所示:

select s.* 
from
(SELECT blah blah complex) s
where (s.a,s.b) in (select s2.a,max(s2.b) from (SELECT blah blah complex) group by s2.a);

或者,为名为 V 的查询(SELECT blah blah complex) 创建 View 并在您的主查询中使用它,如下所示:

select * 
from V
where (a,b) in (select v2.a,max(v2.b) from V as v2 group by v2.a);

希望对您有所帮助!

关于MySQL查找具有字段最大值的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46413865/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com