目录
- Mysql安装指南
- Mysql的基础使用
- Mysql进阶
- Mysql常用函数
Mysql安装指南
Mysql的基础使用方法
Mysql进阶
Mysql常用函数
COALESCE
COALESCE(合并)函数在 SQL 中用于从一系列的参数中返回第一个非 NULL
值,如果所有参数都是 NULL
,它将返回 NULL
。
例如:SELECT COALESCE(NULL, NULL, 'First non-null value', 123, NULL);
以上函数就会返回 'First non-null value'
,因为这是第一个非 NULL
的参数。
在力扣176.第二高的薪水中,可以使用COALESCE函数来保证无论子查询中返回值情况如何,都能保证有一个值输出,要么为第二高的薪水值,要么为NULL,而不会出现空的情况。
with t1 as (
select id,salary,dense_rank() over (order by salary desc) as salary_rank
from Employee
)
select coalesce((select salary from t1 where salary_rank = 2 limit 1),null) as SecondHighestSalary
三种常用排序
ROW_NUMBER()
为结果集中的每一行分配一个唯一的序号,序号从1开始,按照指定的排序顺序递增。如果存在相同的行,则序号仍然递增,不会重复。- 特点:
- 排名递增
- 不跳序
- 不重复
- 特点:
RANK()
为结果集中的每一行分配一个排名,如果存在相同的行,则它们会得到相同的排名,并且后续的排名会跳过。例如,如果要对成绩进行排序,当有两个第一的时候,两行并列第一(排序值都为1),然后下一行的成绩排序就变成3,也就是1,1,3这样的序号排序- 特点
- 排名重复
- 会跳序
- 特点
DENSE_RANK()
与RANK()
类似,但不会跳序,即便有并列的,其下一行的序号仍旧从当前序号增加1而不是跳增- 特点
- 排名递增
- 不跳序
- 重复
- 特点
使用实际的例子(力扣178.分数排名)来查看row_number(),rank()和dense_rank()的区别
select id,score,
row_number() over (order by score desc) as `row_number`,
rank() over (order by score desc) as `rank`,
dense_rank() over (order by score desc) as `dense_rank `
from Scores
order by score desc
output:
| id | score | row_number | rank | dense_rank |
| -- | ----- | ---------- | ---- | ----------- |
| 3 | 4 | 1 | 1 | 1 |
| 5 | 4 | 2 | 1 | 1 |
| 4 | 3.85 | 3 | 3 | 2 |
| 2 | 3.65 | 4 | 4 | 3 |
| 6 | 3.65 | 5 | 4 | 3 |
| 1 | 3.5 | 6 | 6 | 4 |