假设有一个学生信息表students和一门成绩表scores,其中students表中存储了学生的姓名和学号,scores表中存储了每个学生的成绩信息。现在大家需要查询出每个学生的总分和平均分,并按照总分从高到低排序。
SELECT s.name, s.id, SUM(sc.score) AS sum_score, AVG(sc.score) AS avg_score FROM students s INNER JOIN scores sc ON s.id = sc.student_id GROUP BY s.id ORDER BY sum_score DESC;
上述语句通过INNER JOIN将students表和scores表关联起来,然后使用聚合函数SUM和AVG分别计算出每个学生的总分和平均分,并对学生进行分组。最后通过ORDER BY将查询结果按照总分从高到低排序。
接下来,如果大家需要查询出每个学生的总分和平均分,以及每个学生的平均分是否高于全班平均分,该怎么办呢?这时大家就需要使用嵌套查询。
SELECT s.name, s.id, SUM(sc.score) AS sum_score, AVG(sc.score) AS avg_score, CASE WHEN AVG(sc.score) >(SELECT AVG(score) FROM scores) THEN '高于平均分' ELSE '低于平均分' END AS score_type FROM students s INNER JOIN scores sc ON s.id = sc.student_id GROUP BY s.id ORDER BY sum_score DESC;
在上述语句中,大家使用了嵌套查询来获取全班的平均分,然后通过CASE语句对每个学生的平均分进行判断,判断其是否高于全班平均分,并把结果命名为score_type。其他部分的查询操作与前一段代码相同。
通过上述案例,大家可以看到嵌套查询的使用方法和效果。在使用嵌套查询时,大家需要注意语句的效率和查询结果的准确性,避免出现不必要的性能问题和错误结果。