C.6 子查询
3种常用子查询语法:
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所示。
图C-8学 生总分排名数据列表
图C-9各 科目分数最高的学生数据列表