一道打击了无数人的简单 SQL 面试题
- 2019 年 10 月 10 日
- 筆記
给定一个学生成绩表 grade,有三个字段,id(主键)、name 和 score,分别是学生号(整数),姓名(字符串) 和分数(整数)。
select * from grade
id |
name |
score |
---|---|---|
1003 |
张三 |
60 |
… |
… |
… |
但是这个班级里有一些人是重名的,比如可能有三个人都叫张三,但是分数可能并不相同。
id |
name |
score |
---|---|---|
1003 |
张三 |
60 |
2004 |
李四 |
70 |
1006 |
张三 |
65 |
3005 |
王五 |
80 |
4007 |
张三 |
85 |
… |
… |
… |
现在我希望可以去掉重复的名字,保留同名记录中的任意一条作为有效记录。请用一条查询 SQL 语句实现。
???
id |
name |
score |
---|---|---|
1006 |
张三 |
65 |
2004 |
李四 |
70 |
3005 |
王五 |
80 |
… |
… |
… |
好,下面开始公布答案
select a.* from grade a, (select name, min(id) id from grade group by name) as b where a.id = b.id
如果这个 SQL 理解起来有点困难,那么恭喜你,你必须要好好恶补一下 MySQL 了。