查询表中两个最低和最高工资

Q: Write a query to retrieve two minimum and maximum salaries from the EmployeePosition table.

查找最小的两条记录
To retrieve two minimum salaries, you can write a query as below:

SELECT DISTINCT Salary 
FROM EmployeePosition E1 
WHERE 2 >= (SELECT COUNT(DISTINCT Salary)
			FROM EmployeePosition E2 
			WHERE E1.Salary >= E2.Salary) 
ORDER BY E1.Salary DEsC;

查找最大的两条记录
To retrieve two maximum salaries, you can write a query as below:

SELECT DISTINCT Salary 
FROM EmployeePosition E1 
WHERE 2 >= (SELECT COUNT(DISTINCT Salary) 
			FROM EmployeePosition E2
			WHERE E1.Salary <= E2.Salary) 
ORDER BY E1.Salary DEsC;

其中,一开始不懂这个语句的意思

WHERE 2 >= (SELECT COUNT(DISTINCT Salary) 
			FROM EmployeePosition E2
			WHERE E1.Salary <= E2.Salary) 

看到一个解释:https://stackoverflow.com/questions/20071863/explanation-of-the-query-for-getting-the-3-maximum-salaries

E2是内查询的子表,E1.Salary <= E2.Salary 会循环迭代每一个外表E1的记录跟子表的记录做大小比较,然后计数。

比如在查询最小的两条记录,整个E1的记录,如果只有两个或两个以下记录数小于等于E2当前这个值,那这个值就会选上。换句话说,E2当前这个记录,如果大于等于E1的记录数是1,那么他就是最小的,如果大于等于E1的记录数是2,那么他就是第二小的。

放一个来源解释的截图:
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值