C.6 子查询

3种常用子查询语法:

SELECT(子查询){AS字段} FROM表

SELECT字段FROM表WHERE字段运算符{谓词}(子查询)

SELECT 字段 FROM 表 WHERE {NOT} EXISTS(子查询)

如果希望在如图C-3所示的“成绩表”数据列表中,对参加考试的学生的总成绩进行排名,可以使用以下SQL语句。

SELECT *,(SELECT COUNT(学生)FROM(SELECT 学生,SUM(分数)AS 总分 FROM [成绩表$] GROUP BY学生)A WHERE A.总分>B.总分)+1 AS排名FROM(SELECT学生,SUM(分数)AS总分FROM [成绩表$] GROUP BY学生)B

最终生成的数据透视表如图C-8所示。

如果希望在如图C-3所示的“成绩表”数据列表中,查询各科目分数最高的学生成绩数据记录,可以使用以下SQL语句。

SELECT * FROM [成绩表$]A WHERE 分数=(SELECT MAX(分数)FROM [成绩表$]B WHERE A.科目=B.科目GROUP BY B.科目)

也使用以下SQL语句。

SELECT * FROM [成绩表$]A WHERE 分数 IN(SELECT MAX(分数)FROM [成绩表$]B WHERE A.科目=B.科目 GROUP BY B.科目)

还可以使用以下SQL语句。

SELECT * FROM [成绩表$]A WHERE EXISTS(SELECT 最高分 FROM(SELECT科目,MAX(分数)AS 最高分FROM [成绩表$] GROUP BY科目)B WHERE A.科目=B.科目AND A.分数=B.最高分)

最终生成的数据透视表如图C-9所示。

img503a

图C-8学 生总分排名数据列表

img503b

图C-9各 科目分数最高的学生数据列表