gpt4 book ai didi

mysql - 如何决定 GROUP BY 之后保留 JOINED 表中的哪些记录?

转载 作者:行者123 更新时间:2023-11-30 00:24:55 25 4
gpt4 key购买 nike

我正在尝试左连接两个表并按 MySQL 中第一个表的字段进行分组。如果第一个表中的每条记录在第二个表中有多行,则 GROUP BY 会消除除右侧表中的一个之外的所有记录。有没有办法确定它是哪一个?

给你一个具体的例子,我想获取一个用户列表,加上他们(例如)最昂贵的购买(或最近购买,或其他什么......)的ID,这似乎是一个简单的任务,但我很沮丧,完全不知道该怎么做!

表 1:用户

userId, userName
1 Frank
2 Sarah
3 Tim

表 2:采购

orderId, userId, value
1 3 14.99
2 2 9.99
3 3 79.99
4 1 2.99
5 2 14.99
<小时/>
SELECT * FROM Users LEFT JOIN Purchases ON Users.userId = Purchases.userId

将返回:

userId, userName, orderId, value
1 Frank 4 2.99
2 Sarah 2 9.99
2 Sarah 5 14.99
3 Tim 1 14.99
3 Tim 3 79.99

现在,如果我按 userId 分组,结果将是:

userId, userName, orderId, value
1 Frank 4 2.99
2 Sarah 2 9.99
3 Tim 1 14.99

在这种情况下有没有办法决定保留哪个 orderId 或者是否有完全其他更好的方法来做到这一点?我尝试过一些类似 MAX() 的方法,但这始终只返回整个表的最高值,而不是针对每个用户单独返回。

提前感谢您,非常棒的 stackoverflow 社区!

最佳弗洛里安

最佳答案

在严格的 SQL 中,此查询无效,因为在 Group by 上下文中,您应该仅选择 group by 子句或聚合中包含的字段。然而,Mysql 允许这种语法并将其处理为“我不关心这个字段”,您无法定义选择哪些行值。

但是您可以使用如下查询来完成此操作:从用户 u LEFT JOIN 中选择 u.*,p.*
( SELECT userId, max(value) as max_value FROM Purchases GROUP BY userId) p ON u.userId = p.userId

关于mysql - 如何决定 GROUP BY 之后保留 JOINED 表中的哪些记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22959284/

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