面试关于 MySQL 的编写

上段时间去面试的时候,原本以为自己SQL写的应该没什么大问题的。但是看到面试题的时候却懵逼了,回家自己捣鼓了一下,发现自己还是个弟弟。不得不说SQL博大精深?总得来说还是group by理解的不够深刻。下面是数据表:
面试关于 MySQL 的编写

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 协议》,转载必须注明作者和本文链接
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 13

很好,我一个都不会 :joy:

4年前 评论

@simplewater 我第一次看到也是不会🤣

4年前 评论

:scream:

4年前 评论

前三名那个有点不太理解,楼主有相关的解答贴吗

4年前 评论

第一个还是很常见,虽然我也不会:joy:

跟小说网站的小说分类一样,武侠、言情等八种分类各取最新的十本来展示。

拿来改进已有项目,谢谢🙏。

给你点个赞。

4年前 评论
alalala 4年前
小李世界 (作者) 4年前
alalala 4年前

也不是所有功能必须一条 SQL 执行完吧,毕竟还要考虑数据量大的情况下索引问题。

4年前 评论

@alalala 好的,有空我会更新一下的,感谢反馈

4年前 评论

@lisgroup 嗯嗯,你说的有道理。实际开发确实要注意的确实很多。但是我这里只是还原我所遇到的面试题。

4年前 评论

为啥按你的sql执行执行的不是前三的成绩啊

4年前 评论

@qingyan233 那你的执行结果是什么

4年前 评论

第一个sql 希望有大佬解释一下

4年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!