查找salary中第二大的数据,不使用order by,使用group by实现
首先通过自连接,查询每一个数据对应的大于等于它的数据
select *
from
salaries s1
join
salaries s2 on s1.salary<=s2.salary
从上图的结果中我们可以看出右边的每一个salary都要大于等于左边的salary,这样我们就可以查找出没有一个数据对应有几个大于等于它的数据
通过group by对左边数据进行分组
select s1.salary
from
salaries s1
join
salaries s2 on s1.salary<=s2.salary
group by s1.salary
对分组后的数据按照进行条件查询查找右边不同的salary有两个的数据。例如上述的自连接结果图中,左边salary为85097这一组中,右边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