利用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#;

上一篇:android跨进程通信


下一篇:当潮流突破次元空间,你能想象吗?欢迎来到一个叫“人物动漫化”的程序