成绩分组取最大值问题
描述
一张班级成绩表 (科目,分数,同学),现需要查出各科目 最高分的同学;
数据库表结构
数据库中数据
name
subject
grade
1
lang
90
2
lang
87
3
lang
56
4
lang
234
5
lang
23
5
english
43
4
english
32
3
english
21
2
english
45
1
english
64
1
math
23
2
math
12
3
math
4
4
math
43
5
math
43
解
错误示范
name
max(grade)
subject
5
64
english
1
234
lang
1
43
math
如上所示,该sql语句虽然能查出最大的分数,但是其他列的数据对应关系是错的。而且预期希望查出的math最大分数应该有两个.
解答1
将grade2 表分组后作为新的表,用表联结去查询。
name
subject
grade
4
lang
234
1
english
64
4
math
43
5
math
43
解答2
使用not exists
name
subject
grade
4
lang
234
1
english
64
4
math
43
5
math
43
上面那个语句还可以写为
效率
为了测试以上三条语句的效率,我向数据库中插入了3万条数据。
按照顺序,三条语句的执行时间分别为
SQL1,用时0.07sec
SQL2,用时1.04sec
SQL3,用时0.44sec
可以看出,exists函数的效率是十分低下的。
Last updated