目录
-
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;