sql面试题

这里写目录标题

1.只保留学生的最新成绩

表student中记录学生的成绩信息, 要求只保留学生的最新一条成绩记录

传统方式:

  1. 根据学生编号进行group by, 找到最新的一条记录(编号、时间)
  2. 根据编号和时间, 查询出记录的完整信息(id为2, 5, 6)
  3. 删除其余记录
sql 复制代码
delete from student where id not in (
	select id from student s1 inner join 
	(select `name`, max(time) as time from student group by `name`) s2
	on s1.name = s2.name and s1.time = s2.time
)

通过联表查询, 解决嵌套

  1. 通过与自身表进行关联, 让同一个人的记录互相进行对比,
  2. 设置条件s1.time > s2.time, 且使用left join, 保证时间早的记录被归档在右侧
  3. 即使只有一条记录, 也会被s1.id != s2.id过滤
  4. 时间最晚的那条记录, 永远不会出现在右侧. 右侧都是对比下来, 时间更早的数据, 我们将它们的id排重
  5. 删除这些id
sql 复制代码
delete from student where id in (
	select DISTINCT s2.id
	from student s1 left join student s2 
	on s1.`no` = s2.`no` and s1.id != s2.id
	where s1.time > s2.time
)
相关推荐
lucky_syq1 小时前
Hive SQL和Spark SQL的区别?
hive·sql·spark
溟洵8 小时前
Linux下学【MySQL】表中插入和查询的进阶操作(配实操图和SQL语句通俗易懂)
linux·运维·数据库·后端·sql·mysql
路在脚下@12 小时前
spring boot的配置文件属性注入到类的静态属性
java·spring boot·sql
Sunyanhui118 小时前
牛客网 SQL36查找后排序
数据库·sql·mysql
Mitch31119 小时前
【漏洞复现】CVE-2021-45788 SQL Injection
sql·web安全·docker·prometheus·metersphere
网络安全King20 小时前
网络安全 - SQL Injection
sql·web安全·php
Stanford_11061 天前
高级的SQL查询技巧有哪些?
sql·微信小程序·twitter·微信开放平台
wlyang6661 天前
1. SQL常见笔试题目
数据库·sql
smilejingwei1 天前
SQL,生成指定时间间隔内的事件次序号
数据库·sql·spl·esprocspl
张伯毅1 天前
Flink SQL 支持 kafka 开启 kerberos 权限控制.
sql·flink·kafka