mysql一些刁难的查询问题

这篇博客探讨了如何使用SQL查询获取特定排名的数据,如第二高薪水的员工信息。通过子查询和聚合函数COUNT,结合内连接,可以解决此类问题。同时,展示了不同方法,包括利用子查询作为临时表进行关联查询,以找到每个部门薪水最高的员工。这些技巧不仅适用于第二名,还可扩展到其他排名。
摘要由CSDN通过智能技术生成

1、SQL18 获取当前薪水第二多的员工的emp_no以及其对应的薪水salary

select e.emp_no, s.salary, e.last_name, e.first_name
from salaries as s
join employees as e on e.emp_no = s.emp_no

where s.salary = 
(select s1.salary from salaries as s1 join salaries as s2 
 on s1.salary <= s2.salary
group by s1.salary
having count(distinct s2.salary) = 2)

来自:牛客题目

  • having count 是用来计数,having count(distinct s2.salary) = 2 是用来得到个数为2的salaries
  • 内链接是用来做笛卡尔积,薪水表笛卡尔积,group by 后就可以拿到大于当前薪水的其他薪水合集

这是一个通用的解法,可以扩展到第三名,第四名等场景。

SQL查询每门课程最高分及人数

select  course,sudResult,COUNT(course)stuCount  from (
select * from stud a where sudResult=(select max(sudResult) from stud where course=a.course)
)b
group by course,sudResult

这与上面一样的问题,但另一种解法,似乎很拗口,但这里可以提供一个思路来解答。来自SQL查询每门课程最高分及人数

还有一种方式是将查询结果作为临时表,与原表进行join,来查询。

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

参考博客

sql关联查询—将一个表的查询结果作为新表进行查询操作
详解 Mysql LEFT JOIN和JOIN查询区别及原理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值