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
)
相关推荐
喂完待续6 小时前
【Tech Arch】Hive技术解析:大数据仓库的SQL桥梁
大数据·数据仓库·hive·hadoop·sql·apache
路多辛7 小时前
Golang database/sql 包深度解析(二):连接池实现原理
数据库·sql·golang
javachen__11 小时前
SpringBoot整合P6Spy实现全链路SQL监控
spring boot·后端·sql
武昌库里写JAVA21 小时前
JAVA面试汇总(四)JVM(一)
java·vue.js·spring boot·sql·学习
老虎06271 天前
数据库基础—SQL语句总结及在开发时
数据库·sql·oracle
Mr. zhihao1 天前
SQL LEFT JOIN 与 WHERE 条件的隐藏坑
数据库·sql
silver98861 天前
sql链接的url中serverTimezone的作用
数据库·sql
sleetdream1 天前
Flink Sql 按分钟或日期统计数据量
sql·flink
一宿君1 天前
Github 9 个惊艳的开源 NL2SQL 项目
sql·nlp·github
吃掉你也没关系吧2 天前
【postgresql】一文详解postgresql中的统计模块
sql·postgresql