最近参加了几次面试,其中对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不能在同一语句中即查询又更新。
三、数据库中有三千万条数据,请写出你认为执行效率最高的语句,实现每个月初把表中余额字段清空的操作。
待解决。。。