一道打击了无数人的简单 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 了。