MySQL:连接表并根据另一列上的聚合函数从一行返回一列

标签 mysql sql

假设有两个表:

  • 表 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 中的每一行我们得到对应的external来自B哪里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

有没有办法实现这一点,最好不使用子查询?

最佳答案

不知道为什么不需要子查询,但相关子查询对我来说看起来更简单

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:连接表并根据另一列上的聚合函数从一行返回一列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40683199/

相关文章:

PHP MYSQL SELECT AND LEFT JOIN - 不返回所有结果

php - 在数组输出中添加单引号

mysql - 将可变数量的参数传递给 sql 查询

mysql调用程序到另一个程序中

sql - BigQuery 比较日期

MySQL:使用 GROUP BY 时是否可以限制 WHERE 子句中的行

java - 如何获取表中某一列的总和(对于特定的员工ID)并将其存储在另一个表的另一列中?

mysql - Zend db 表 - save() 不保存

sql - 索引是否用于嵌套选择中的 'outer' 和 'inner' where 子句?

mysql - 如何解决 mysql 查询错误 #1111 - 组函数的无效使用问题