【MySQL】1、根据条件排名;2、sql拼接字段;3、插入已存在的记录
程序员文章站
2022-05-09 20:53:32
...
一、根据条件进行排名
参考链接:https://www.cnblogs.com/scwbky/p/9558203.html
要求,对查询条件进行排名,
有三种情况
第一种:并列排名,下一位空出所占的名次
rank() over:查出指定条件后进行排名
例:根据分数进行排名
名次 |
id |
分数 |
1 |
111 |
100 |
2 |
112 |
98 |
2 |
113 |
98 |
4 |
114 |
97 |
5 |
115 |
96 |
第二种:并列排名,下一位不空出所占名次,名次顺延
dense_rank() over:
例:根据分数进行排名
名次 |
id |
分数 |
1 |
111 |
100 |
2 |
112 |
98 |
2 |
113 |
98 |
3 |
114 |
97 |
4 |
115 |
96 |
第三种:不考虑是否并列,连续往下排名
row_number() over
例:根据分数进行排名
名次 |
id |
分数 |
1 |
111 |
100 |
2 |
112 |
98 |
3 |
113 |
98 |
4 |
114 |
97 |
5 |
115 |
96 |
二、拼接数据表中的字段
牛客网sql练习第32题
解析:将一个数据表的两个字段拼接成一个字段显示出来
知识点:CONCAT_WS(separator,str1,str2,…)函数
第一个参数为参数的分隔符,第二个参数和第三个参数是要连接的字符串,可以连接多个字符串
分隔符可以是字符串,也可以是参数
-- 执行sql
select CONCAT_WS(' ',e.last_name,e.first_name)as Name from employees as e
执行结果
三、insert ignore和replace to和on duplicate key update
1、insert ignore:向数据库插入一条记录,如果记录存在(主键冲突),则忽略本次插入数据
-- 向user表中插入重复的记录
-- id为主键
insert into user(id,name,age)values(1,"点点",21)
-- 由于主键冲突,这个插入将会被忽略
insert ignore into user(id,name,age)values(1,"点点",21)
2、replace into:强制更新
-- 由于主键冲突,它会删除原先的记录,再把这个记录插入进来
replace into user(id,name,age)values(1,"点点",23);
3、on duplicate key update:插入或更新
-- 由于主键冲突,它只会执行 Update语句
insert into user(id,name,age)values(1,'点点', 22) ON DUPLICATE KEY UPDATE name='点点',age=22;
上一篇: 计算机操作系统——链接
下一篇: Android 学习笔记