如何理解自连接查询?
select s.emp_no, s.salary, e.last_name, e.first_name
from salaries s join employees e
on s.emp_no = e.emp_no
where s.salary =
(
select s1.salary
from salaries s1 join salaries s2 -- 自连接查询
on s1.salary <= s2.salary
group by s1.salary
having count(distinct s2.salary) = 2 -- (去重之后的数量就是对应的名次)
);举例子来看哈:
当使用 s1.salary <= s2.salary 进行自连接之后,表变成了这样:
| s1.salary | s2.salary |
|---|---|
| 100 | 100 |
| 99 | 100 |
| 98 | 100 |
| 98 | 100 |
| 97 | 100 |
| 99 | 99 |
| 98 | 99 |
| 98 | 99 |
| 97 | 99 |
| 。。。 | 。。。 |
相信画到这里,大家已经明白了,我们接下来在按照s1.salary进行分组的话:
》=100的会分到一个组(1个)
》=99的有两个(100,99)
。。。。
递推即可。
然后对s2.salary进行去重,计数即可!!



京公网安备 11010502036488号