中等
177. 第N高的薪水
1 | CREATE FUNCTION getNthHighestSalary(N INT) RETURNS INT |
- 函数的定义,关键字
create function
,begin
开始,end
结束
178. 分数排名
1 | select Score,dense_rank() over(order by Score desc) as `Rank` from Scores; |
- 窗口函数
dense_rank()
:两个分数相同,则排序相同,下一个分数的排序是下一个连续的整数值,不空出并列所占的位次 rank()
:两个分数相同,则排序相同,下一个分数的排序需空出并列所占的位次row_number()
:为行分配序号,不考虑是否并列,即使数值相同也会连续排序over()
:排序函数没有参数,必须通过over()
语句中的order by column_name
指定按照某列排序,还可通过over()
语句中的partition by column_name
指定按照某列分组
180. 连续出现的数字
1 | select distinct Num as ConsecutiveNums from( |
- 窗口函数
lag(expr,offset) over()
和lead(expr,offset) over()
:分别返回当前行之前和之后的行,offset
指定向前或向后滑动几行
184. 部门工资最高的员工
1 | select Department,Employee,Salary from( |
626. 换座位
1 | select id, |
困难
185. 部门工资前三高的所有员工
1 | select Department,Employee,Salary from ( |
- 与184题“部门工资最高的员工”不同,不能使用
rank()
而应该使用dense_rank()
262. 行程和用户
1 | select Request_at as `Day`,round(sum(if(Status='completed',0,1))/count(*),2) as 'Cancellation Rate' from Trips |
round()
函数:四舍五入保留指定位数的小数
601. 体育馆的人流量
1 | select distinct a.* from Stadium as a,Stadium as b,Stadium as c where |