SQL面试总结

最近参加了几次面试,其中对SQL语句的书写也属于考察的重点,在这里总结一下

一、有如下的表


1.查询出所有科目都高于80分的学生的姓名

当时自己第一次碰到,不假思索的去写,返现实现的过于复杂,正确的写法应该是:

SELECT NAME
FROM student
WHERE NAME NOT IN
(SELECT NAME FROM student WHERE score<80)

GROUP BY NAME;

2.查询姓名、平均成绩、总分,以总分降序排列

SELECT NAME,AVG(score),SUM(score)
 FROM student
 GROUP BY NAME
 ORDER BY SUM(score) DESC;

3.实现下图


 SELECT id,NAME,course,score,
 CASE
 WHEN score>90 THEN '优秀'
 WHEN score>80 AND score<90 THEN '良好'
 WHEN score>60 AND score<80 THEN '及格'
 ELSE '不及格'
 END AS 等级
 FROM student;

二、有如下表

 

1、整理上表,删除除了id之外,其余字段内容重复的列

DELETE FROM userinfo
WHERE id NOT IN
(
SELECT temp.tid FROM(
SELECT MIN(id) AS tid
FROM userinfo
GROUP BY user_id,username,info,DATE) AS temp

);

这个问题在mysql中直接绿色部分加红色部分,会报错,原因是mysql不能在同一语句中即查询又更新。

三、数据库中有三千万条数据,请写出你认为执行效率最高的语句,实现每个月初把表中余额字段清空的操作。

待解决。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值