多表连接后取分组中某个值为最大的一行

本文深入探讨了一种复杂的SQL查询,通过使用子查询找到每个员工的最高工资记录,然后通过LEFT JOIN与员工表进行连接,获取详细信息。此查询涉及分组聚合、子查询和多表连接,对于理解高级SQL操作具有指导意义。
@Select("select DISTINCT b.*, a.sum " +
        "from (SELECT * FROM wage WHERE wid IN  " +
        "(SELECT MAX(wid) FROM wage GROUP BY sid)) a " +
        "left join (select * from staff) b on a.sid = b.sid")

先(SELECT MAX(wid) FROM wage GROUP BY sid)  将薪水表根据外键 员工id来分组 并且查出每个组中最大的值;

SELECT * FROM wage WHERE wid IN " + "(SELECT MAX(wid) FROM wage GROUP BY sid) 查出的结果后给wid进行比较 选择当前行

后面的就是join多表查询了

参考链接:

https://www.dazhuanlan.com/2019/12/23/5e002da115bb0/
https://www.jianshu.com/p/694fb2c75ecd
在 MySQL 中查询某一行数据中的最大,可以使用 `GREATEST()` 函数。该函数接受个参数,并返回其中的最大。 例如,假设有一个 `greatests` 包含字段 `key`, `X`, `Y`, `Z`,可以通过以下 SQL 查询每一行中 `X`, `Y`, `Z` 字段的最大: ```sql SELECT `key`, GREATEST(X, Y, Z) AS `greatest` FROM greatests; ``` 如果需要对列进行比较并获最大,也可以嵌套使用 `GREATEST()` 函数,例如求三列之间的最大: ```sql SELECT GREATEST(GREATEST(X, Y), Z) AS `greatest` FROM greatests; ``` 此外,还可以通过 `IF` 语句手动实现类似功能,比如比较三个字段 `v1`, `v2`, `v3` 的大小关系[^5]: ```sql SELECT IF(v1 > v2, IF(v1 > v3, v1, v3), IF(v2 > v3, v2, v3)) AS max_value FROM table_name; ``` 需要注意的是,`GREATEST()` 函数是 MySQL 特有的扩展,不适用于所有数据库系统(如标准 SQL 或 Oracle 数据库)。 ### 查询分组中的最大 如果需要查询某一列的最大,并获对应行的其他字段信息,则可以使用子查询或者 `JOIN` 操作。例如,查询每个用户的最大 `created` 及其对应的完整数据: ```sql SELECT a.* FROM table_name a INNER JOIN ( SELECT user_id, MAX(created) AS max_created FROM table_name GROUP BY user_id ) b ON a.user_id = b.user_id AND a.created = b.max_created; ``` 此查询首先查找每个 `user_id` 对应的最大 `created` ,然后将原始与这个结果进行连接,从而获完整的行数据。 ### 获最大 若要查询整个中某个字段的最大,可以直接使用 `MAX()` 函数: ```sql SELECT MAX(column_name) FROM table_name; ``` 如果需要获最大所在行的全部数据,可以结合 `ORDER BY` 和 `LIMIT` 进行查询: ```sql SELECT * FROM table_name ORDER BY column_name DESC LIMIT 1; ``` 这种方式适用于单个字段的最大查询,但不适用于列比较的情况。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值