利用SQL语言进行分组查询和分组过滤

2022/2/8 19:14:31

本文主要是介绍利用SQL语言进行分组查询和分组过滤,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录:1.分组

   2.分组举例

   3.分组过滤

   4.分组过滤举例

 

1.分组(SQL语言的亮点之一)

  (1)定义:SQL可以将检索到的元组按照某一条件进行分类,具有相同条件值的元组划到一个组或一个集合中,同时处理多个组或集合的聚集运算

  (2)语法

    Select 列名 | expr | agfunc(列名) [[, 列名 | expr | agfunc(列名) ] ... ]

    From  表名1, [, 表名2 ... ]

    [Where 检索条件]

    [Group by 分组条件];  

  (3)分组条件

    列名1,列名2,...

2.举例

  (1)求每一个学生的平均成绩

    Select S#, Avg( Score )

    From SC

    Group by S#;

  (2)求每一门课程的平均成绩

    Select C#, Avg ( Score )

    From SC

    Group by C#;

  (3)求不及格课程超过两门的同学的学号

 

3.分组过滤

  (1)定义:在分组的基础上,将满足条件的集合(分组)留下,不满足条件的剔除

  (2)Having 子句(分组过滤子句):没有 Group by 子句,就不能有 Having 子句

  (3)语法格式

    Select 列名 | expr | agfunc(列名) [[, 列名 | expr | agfunc(列名) ] ... ]

 

    From  表名1, [, 表名2 ... ]

 

    [Where 检索条件]

 

    [Group by 分组条件 [ Having 分组过滤条件] ];

 

4.举例

  (1)求不合格课程超过两门的同学的学号

    Select S# 

    From SC

    Where Score < 60

    Group by S# Having Count(*) > 2;

  (2)求有十人以上不及格的课程号

    Select C#

    From SC

    Where Score < 60

    Group by C# Having Count(*) > 10;

  (3)求有两门以上不及格课程同学的学号及其平均成绩

    Where Score < 60 是不对的,没有录入大于 60 分课程的成绩

    正确做法:先找出有两门课程不及格的同学的学号,再对他们的课程成绩做平均值

    Select S#, Avg(Score)

    From SC

    Where S# in ( Select S# From SC Where Score < 60 Group by S# Having Count(*) > 2 )

    Group by S#;



这篇关于利用SQL语言进行分组查询和分组过滤的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程