MySQL:加入表并根据另一列上的聚合函数从一行返回一列[重复]
Posted
技术标签:
【中文标题】MySQL:加入表并根据另一列上的聚合函数从一行返回一列[重复]【英文标题】:MySQL: JOIN tables and return a column from a row depending on an aggregate function on another column [duplicate] 【发布时间】:2017-04-02 15:58:43 【问题描述】:假设有两个表:
表 A
id | name
1 x
2 y
表 B
foreign_key | value | external
1 1 60
1 2 50
2 3 80
2 4 90
想要的结果是JOIN
,如下所示:
id | name | external
1 x 50
2 y 90
即,对于A
中的每一行,我们从B
获得相应的external
,其中value
是给定id
的最大值。
到目前为止,我所拥有的是:
SELECT
A.`id`,
A.`name`,
B.`external`
FROM `A`
LEFT JOIN `B`
ON A.id = B.foreign_key
GROUP BY id
这显然会返回遇到的第一个 B.external
而不是 value
最高的那个:
id | name | external
1 x 60
2 y 80
有没有办法实现这一点,最好不使用子查询?
【问题讨论】:
如果你真的不想使用子查询,那么你可以使用手册中描述的 LEFT JOIN(参见手册:dev.mysql.com/doc/refman/5.7/en/…),但它会比在“重复”链接中用作接受答案的不相关查询 【参考方案1】:不知道为什么不想要子查询,但相关子查询对我来说看起来更简单
select id, name,
(Select external
from TableB B where A.id = B.foreign_key Order by Value desc Limit 1 )
From TableA A
如果您想使用JOIN
实现此目的,那么您可能需要加入TableB
两次
【讨论】:
以上是关于MySQL:加入表并根据另一列上的聚合函数从一行返回一列[重复]的主要内容,如果未能解决你的问题,请参考以下文章