查询出工资最多的前五名

with e as (select m.sal, rank()over(order by sal desc) as mv from (select distinct(sal) from emp) m) 
select * from emp where emp.sal>=(select min(e.sal) from e where e.mv<3) order by emp.sal desc;



上面是以前写的   虽然能用但是在方面明显不足   


最近看到oracle本身是有提供相关函数的:

比如  rank()over()

dense_rank()over()

row_number()over()等一系列分析函数

解决上面的问题就很好办了

select   dense_rank()over(order by sal) from emp;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,作为一个语言模型,我无法直接查询和操作数据库。但我可以提供SQL查询语句的示例,您可以将其用于适当的数据库中执行。 1. 查询在"第一银行"工作且工资超过2000的员工姓名、居住街道和城市 ``` SELECT e.ename, e.address_street, e.address_city FROM employee e JOIN department d ON e.deptno = d.deptno WHERE d.dname = '第一银行' AND e.salary > 2000; ``` 2. 查询在"第一银行"或者"第二银行"工作的员工姓名,院序排序后取后十条 ``` SELECT ename FROM employee WHERE deptno IN (SELECT deptno FROM department WHERE dname IN ('第一银行', '第二银行')) ORDER BY empno DESC LIMIT 10; ``` 3. 为第一银行所有不超过十万元工资的经理增加10%的工资,对超过十万元的增加3% ``` UPDATE employee e SET salary = CASE WHEN e.job = '经理' AND e.salary <= 100000 THEN e.salary * 1.1 WHEN e.job = '经理' AND e.salary > 100000 THEN e.salary * 1.03 ELSE e.salary END WHERE e.deptno = (SELECT deptno FROM department WHERE dname = '第一银行'); ``` 4. 找雇员最多的公司 ``` SELECT d.dname FROM department d JOIN employee e ON d.deptno = e.deptno GROUP BY d.dname ORDER BY COUNT(*) DESC LIMIT 1; ``` 5. 找平均工资高于"第一银行"的公司 ``` SELECT d.dname FROM department d JOIN employee e ON d.deptno = e.deptno GROUP BY d.dname HAVING AVG(e.salary) > (SELECT AVG(salary) FROM employee WHERE deptno = (SELECT deptno FROM department WHERE dname = '第一银行')); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值