常用的SQL函数
- row_number() over()
- partition by ()
- group by()
- order by()
- rank()函数与dense_rank() 的用法区别
```plsql
SELECT *
FROM (select sno,cno,degree,
rank()over(partition by cno order by degree desc) mm
from score)
where cno = ‘3-245’
- dense_rank()
```plsql
SELECT *
FROM (select sno,cno,degree,
dense_rank()over(partition by cno order by degree desc) mm
from score)
where cno = '3-245'
- rank()和dense_rank()都可以将并列第一名的都查找出来;但rank()是跳跃排序,有两个第一名时接下来是第三名;而dense_rank()是非跳跃排序,有两个第一名时接下来是第二名
- 分区函数partition by () 与 rank() 的用法区别
- row_number()
```plsql
SELECT *
FROM (select sno,cno,degree,
row_number()over(partition by cno order by degree desc) mm
from score)
where mm = 1;
- 当排序结果存在并列的时候,row_number() 只返回一个结果,此时需要用rank()函数。
- datediff()
- 获取两个日期的时间间隔
- datediff(date_format(b.answer_time,’yyyy-MM-dd’),date_format(a.emp_assign_time,’yyyy-MM-dd’))
- date_format()
- 日期格式化
- date_format(b.answer_time,’yyyy-MM-dd’)
窗口函数
-- 基本用法:窗口函数 over(partition by 分组字段 order by 排序字段)
select *,rank() over(partition by id order by score)as ranking from student;
select *,dense_rank() over(partition by id order by score)as ranking from student;
select *,row_number() over(partition by id order by score)as ranking from student;
-- 分布函数:percent_rank()、cume_dist()
select *,percent_rank() over(partition by id order by score)as ranking from student;
select *,cume_dist() over(partition by id order by score)as ranking from student;
-- 前后函数:lag()、lead()
select *,lag(score,1) over(partition by id order by score)as score from student;
select *,lead(score,1) over(partition by id order by score)as score from student;
-- 头尾函数:first_value()、last_value()
select *,first_value(score) over(partition by id order by score)as score from student;
select *,last_value(score) over(partition by id order by score)as score from student;