分组查询

  • 分组查询

在这里插入图片描述

  SELECT CourseID,AVG(Score) AS 课程平均成绩
  FROM Score
  GROUP BY CourseID

以上这种类型查询 ,在SQL Sever 中叫作分组查询,分组查询采用GROUP BY 子句来实现。

  • 多列分组查询

    而如果要统计每个学期男、女学生人数,则理论上先把每个学期分开,再针对每个学期,把男、女学生人数各自统计,也就是需要按照两个列进行分组:所属年纪和性别。T-SQL语句如下。

    SELECT COUNT(*) AS 人数,SGrade AS 年级,SSex AS 性别 FROM Students
    GROUP BY SGrade,SSex
    ORDER BY SGrade

    而结果如下:

    在这里插入图片描述
    不难理解,使用GROUP BY 关键字时。在SELECT 列表中可以指定的列是有限制的,仅允许以下几项。
    被分组的列为每个分组返回一个值的表达式,如聚合函数计算出的列。

  • 使用HAVING子句进行分组筛选

    (1)查询年级总人数超过15的年级。
    首先可以通过分组查询获取每个年级的总人数,对应的T-SQL语句如下。

  SELECT COUNT(*) AS 人数,SGrade AS 年级 FROM Students
  GROUP BY SGrade

    但是还有一个条件: 人数超过15的年级。这个时候,牵扯到分组统计后的条件限制,限制条件为COUNT(*)>15。这时候使用WHERE子句是不能满足查询要求的。因为WHERE子句只能对没有分组统计前的数据行进行筛选。对分组后的条件的筛选必须使用使用HAVING子句,简单地说,HAVING子句用来分组后的数据进行筛选,将"组"看作"列"来限定条件。
      以上需求的T-SQL语句如下。

    SELECT COUNT(*) AS 人数,SGrade AS 年级 FROM Students
   GROUP BY SGrade
    HAVING COUNT(*)>15
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值