题目:查找员工表中薪资倒数第二的员工信息
答案:SELECT *
FROM employees m
WHERE 2 = (SELECT COUNT(DISTINCT salary )
FROM employees
WHERE salary <= m.salary);
不明白之处:主查询中的筛选条件——(select count(distinct salary) from employees where salary<=m.salary)=2 中等号左侧返回的结果是一个数值,不符合where子句的语法——where 字段名称 操作符 值
求教大神指点,感激不尽!
你的问题标题已经很明确了,这就是一个子查询,条件就是子查询的结果=2(某个值)
关于where子句的语法——where 字段名称 操作符 值 这个不要过分纠结操作符两边的值,你大可写成 1=1 (恒成立)这个仅仅只是一个判别筛选数据的条件。这个题目的答案是通过子查询或者严格来说是自子查询实现的查找数据。
此外,该题目答案也不止这一种。常用的解决方案还有窗口函数可以实现
窗口函数可以进行排序,生成序列号等一般的聚合函数无法实现的高级操作。
窗口函数也称为OLAP函数,意思是对数据库数据进行实时分析处理。窗口函数就是为了实现OLAP而添加的标准SQL功能。
窗口函数语法:其中[]中的内容可以省略
<窗口函数> over ([partition by <列清单>] order by <排序用列清单>)
窗口函数大体可以分为以下两种:
1.能够作为窗口函数的聚合函数**(sum,avg,count,max,min)**
2.rank,dense_rank,row_number等专用窗口函数。
————————————————
版权声明:本文为CSDN博主「石小秀1995」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43852674/article/details/104508625