面试关于 MySQL 的编写
上段时间去面试的时候,原本以为自己SQL写的应该没什么大问题的。但是看到面试题的时候却懵逼了,回家自己捣鼓了一下,发现自己还是个弟弟。不得不说SQL博大精深?总得来说还是group by理解的不够深刻。下面是数据表:
1.请写出每门科目成绩前三的数据。(表:student_score,姓名:name,科目:subject,分数score)
SELECT
a.*
FROM
student AS a
LEFT JOIN student AS b ON a.`subject` = b.`subject`
AND a.score < b.score
GROUP BY
a.id,
a. SUBJECT,
a.score
HAVING
COUNT(b.id) < 3
ORDER BY
a.`subject`,
a.score DESC
参考链接:https://blog.csdn.net/sjw_peak/article/details/88567772
2.写出删除表中重复数据,并保留一条。
DELETE FROM student WHERE
(`name`,`subject`,score) IN (
SELECT t.name,t.subject,t.score FROM (
SELECT `name`,`subject`,score FROM student
GROUP BY `name`,`subject`,score
HAVING COUNT(1)>1
)t
)
AND id not in(
SELECT a.minId FROM (
SELECT id as minId FROM student
GROUP BY `name`,`subject`,score
HAVING COUNT(1)>1
)a
)
参考链接:https://blog.csdn.net/n950814abc/article/details/82284838
3.写出所有科目成绩都大于80分的学生数据
select name from student group by name having min(score)>80;
本作品采用《CC 协议》,转载必须注明作者和本文链接
很好,我一个都不会 :joy:
@simplewater 我第一次看到也是不会🤣
:scream:
前三名那个有点不太理解,楼主有相关的解答贴吗
第一个还是很常见,虽然我也不会:joy:
跟小说网站的小说分类一样,武侠、言情等八种分类各取最新的十本来展示。
拿来改进已有项目,谢谢🙏。
给你点个赞。
也不是所有功能必须一条 SQL 执行完吧,毕竟还要考虑数据量大的情况下索引问题。
@alalala 好的,有空我会更新一下的,感谢反馈
@likunyan 感谢支持
@lisgroup 嗯嗯,你说的有道理。实际开发确实要注意的确实很多。但是我这里只是还原我所遇到的面试题。
为啥按你的sql执行执行的不是前三的成绩啊
@qingyan233 那你的执行结果是什么
第一个sql 希望有大佬解释一下
@_zzh