0
点赞
收藏
分享

微信扫一扫

SQL Server 数据分组

ITWYY 2022-03-25 阅读 76
sql数据库

目录

Group By 语句

Group By 子句与聚合函数

Having 子句


  1. Group By语句

        Group By 从字面意义上理解就是根据“By”指定的规则对数据进行分组,所谓的分组就是将一个“数据集”划分成若干个“小区域”,然后针对若干个“小区域”进行数据处理。

      Group By 在查询数据时经常用到。例如,查询某个区域的男女比例,查询为完成项目的人数等等。

语法:

     Select字段

     From 表名

     Group by 要分组的字段;

    

在此查询语法中, GROUP BY 子句为列中的每个值组合生成一个组。

下面我们通过一个例子来使用以下Group By :

例:

SELECT

   customer_id,

    YEAR (order_date) order_year

FROM

   sales.orders

WHERE

   customer_id IN (1, 2)

GROUP BY

   customer_id,

    YEAR (order_date)

ORDER BY

   customer_id;

2. GROUP BY子句和聚合函数

GROUP BY 子句通常与聚合函数一起用于统计数据。

聚合函数对组执行计算并返回每个组的唯一值。 例如, COUNT() 函数返回每个组中的行数。

     其他常用的聚合函数是: SUM() 总和, AVG()平均值 , MIN() 最小值, MAX()最大值 。GROUP BY 子句将行排列成组,聚合函数返回每个组的统计量(总数量,最小值,最大值,平均值,总和等)。

语法:

 Select 字段1,sum(字段),avg(字段),min(字段),max(字段)

     From 表名

     Group by 字段1

例:查询男生和女生的人数

select ssex,count(*) 人数

from student

group by ssex;

例: 查询各科成绩最高和最低的分

select cno,max(score)最高分,min(score)最低分

from sc

group by cno;

SUM() 总和, AVG()平均值的使用方法和上面的两个例子相同,根据需要来使用即可.

3. Having 子句

      HAVING 子句通常与[GROUP BY]子句一起使用,以根据指定的条件列表过滤分组和where 的作用相似,都是用来为数据添加查询条件的。

 以下是 HAVING 子句的语法:


          

Select 字段

From 表名

Group by 字段

Having 查询条件;

在此语法中, GROUP BY 子句将行汇总为分组, HAVING 子句将一个或多个条件应用于这些每个分组。

只有使条件评估为 TRUE 的组才会包含在结果中。 换句话说,过滤掉条件评估为 FALSE 或 UNKNOWN 的组。

因为SQL Server在 GROUP BY 子句之后处理 HAVING 子句,所以不能通过使用列别名来引用选择列表中指定的聚合函数,不然会报错。

例:在having 后使用列名

select a.sno,a.sname,count(b.cno)

from student a

left join sc b on a.sno = b.sno

group by a.sno,a.sname

having b.cno < (select count(distinct cno) from course)

必须明确使用 HAVING 子句中的聚合函数表达式,如下所示

select a.sno,a.sname,count(b.cno)

from student a

left join sc b on a.sno = b.sno

group by a.sno,a.sname

having count(b.cno) < (select count(distinct cno) from course)

例:查找平均价格介于 500 和 1000 之间的产品类别

SELECT category_id,AVG (list_price) avg_list_price

FROM production.products

GROUP BY category_id

HAVING AVG (list_price) BETWEEN 500 AND 1000;
举报

相关推荐

0 条评论