sql关联查询—将一个表的查询结果作为新表进行查询操作

本文通过例题介绍如何进行SQL关联查询,解决如何查询各个部门最高工资中最低的工资问题。首先获取每个部门的最高工资,然后使用子查询或关联查询方法找到这些最高工资中的最低值。不熟悉数据库基础可能会导致此类常见错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

例题:#  各个部门中 最高工资中最低的那个部门的 最低工资是多少?

先考虑取得各个部门最高工资

SELECT MAX(salary) AS max_salary,e.`department_id`  did
        FROM employees e
        GROUP BY e.`department_id`

结果为:

再将此表命名tmp在进行查询

SELECT MIN(max_salary),did
FROM
(SELECT MAX(salary) AS max_salary,e.`department_id`  did
        FROM employees e
        GROUP BY e.`department_id`)AS tmp

此时结果却为:

由此可见查询之后的表结构数据之间并无关系

因此应该使用其中的单列数据

解法一:

ELECT MIN(e2.salary)
FROM employees e2
WHERE e2.department_id =
    (SELECT e1.department_id
    FROM employees e1
    GROUP BY e1.department_id
    HAVING MAX(e1.salary) =
        (SELECT MIN(tmp.max_salary) AS min_salary
        FROM(
            SELECT MAX(salary) AS max_salary,e.`department_id`  did
            FROM employees e
            GROUP BY e.`department_id`
            )AS tmp
    )
)

或者将此表与主表进行关联查询

解法二:

SELECT e1.salary
FROM employees e1,
(SELECT MAX(salary) AS max_salary,e.`department_id`  did
        FROM employees e
        GROUP BY e.`department_id`
        ORDER BY max_salary
        LIMIT 0,1
)AS temp
WHERE e1.department_id = temp.did

不理解数据库的基础就会犯这种低级错误哈哈

转载于:https://www.cnblogs.com/Noctis/p/10497718.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值