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:加入表并根据另一列上的聚合函数从一行返回一列[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在给定列上聚合数据框并显示另一列

PySpark:根据另一列的顺序收集数据框列上的集合

T-SQL 根据另一表列过滤一列上的多个值

将列上的纪元时间保存到另一列 postgres

MySQL sum 和 distinct 在具有多个连接的另一列上

当另一列具有特定值时,列上的 NOT NULL 约束