MySQL MAX 在连接查询中的应用

标签 mysql join max

我想根据最大值连接两个表。

max(lg) 是正确的,但“事件”列无法正确加载。

下面是我的示例表和所需的输出...

我正在使用...

SELECT a.id
     , a.name
     , b_lg
     , b_event
  FROM TABLE_A a
  LEFT 
  JOIN
     ( SELECT MAX(lg) as b_lg
            , event as b_event
            , enrolid as b_enrolid 
         FROM TABLE_B 
        GROUP 
           BY lg) b
    ON a.id = b_enrolid
 GROUP BY a.id

####### 表A ########

  id |    name        |
   1 |     John       |
   2 |     Mike       |
   3 |     Dave       |
   4 |     Sarah      |

################表B##############

  id |  enrolid |    lg     |  event   |
   1 |  1       |    10     |    A     |
   2 |  2       |    20     |    B     |
   3 |  1       |    30     |    C     |
   4 |  2       |    60     |    D     |
   5 |  2       |    50     |    E     |
   6 |  3       |    60     |    F     |
   7 |  1       |    70     |    G     |
   8 |  3       |    20     |    H     |

###### 期望输出 #####

  id |  name       |   lg   |   event   |
   1 |  John       |   70   |     G     |
   2 |  Mike       |   60   |     D     |
   3 |  Dave       |   60   |     F     |
   4 |  Sara       |  NULL  |   NULL    | 

最佳答案

此查询将为您提供您想要的结果。它计算出每个 enrolidlgMAX 值,然后使用这些值来 LEFT JOIN >Table_A 获取名称Table_B 获取事件:

SELECT A.id, A.name, B.lg, B.event
FROM Table_A A
LEFT JOIN (SELECT enrolid, MAX(lg) AS max_lg
           FROM Table_B
           GROUP BY enrolid) M ON M.enrolid = A.id
LEFT JOIN Table_B B ON B.enrolid = M.enrolid AND B.lg = M.max_lg
ORDER BY A.id

输出:

id  name    lg      event
1   John    70      G
2   Mike    60      D
3   Dave    60      F
4   Sarah   null    null

Demo on dbfiddle.com

关于MySQL MAX 在连接查询中的应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58586760/

相关文章:

mysql - 使用同一表中的列更新行

mysql - 如何对不同表和不同过滤器上的多个计数求和

mysql - 根据where子句连接2个表并提取一列

java - 如何利用投入的设备成本找到一笔资金的最有效利用?

mysql - SQL : I search the good query with select max() and select count()

php - 规划、扩展和优化大型 Web 应用程序

javascript - 计算 Sequelize.js 中联接表之间多对多表中的关系

mysql - 如何将 CSV 列表连接到表列

mysql - JOIN 转换为整数后的字符串

mysql - 获取最大值和最小值以及所有值和多个 where 子句