9、SQL-GROUP BY 语句

SQL-GROUP BY 语句

一、概念
group by 语句:分组函数,根据by 之后的规则对数据进行分组。分组就是将杂乱的数据集,按照某种规则划分成若干个小区域,然后对小区域进行汇总处理。
类似于excel中的数据透视表,按照某些行/列进行数据的汇总处理。

二、group by 的使用

1、聚合函数
group by 配合聚合函数进行使用。常用的聚合函数有:

  • count() 计数
  • sum() 求和
  • avg() 平均数
  • max() 最大值
  • min() 最小值

2、group by 语法:
select column_name, aggregate_function(column_name)
from table_name
where colunm_name operator value
group by colum_name

select 列名,聚合函数(列名) from 表
where 列名=“XX”
group by 列名

3、例子:
有如下的表“PRICE”:
在这里插入图片描述
3.1 查找每个客户的总金额
select customer ,sum(price)from price
group by customer

结果集类似如下:
在这里插入图片描述
如果省略了group by,则结果集如下:
在这里插入图片描述
如果使用语句省略了group by ,结果集效果非我们所需要的。
上面的select 语句指定了两列(customer和sum(price)),“sum(price)”返回一个单独的值(“price”列的综合),而“customer”返回6个值(每个值对应“price”表中的每一行)。因此我们得不到正确的结果集。

3.2 group by 一个以上的列
select customer,date,sum(price)from price
group by customer,date

结果集如下:
在这里插入图片描述
如果语句变成:
select customer,date,sum(proce)from price
group by customer

执行以上语句则会报错,因为可能导致一行中某一列存在多个值
在这里插入图片描述
3.3涉及多个表
表1:price 表
在这里插入图片描述
表2:department
在这里插入图片描述
select
(select d.dept_name from department d where p.dept_no = d.dept_no) as 部门,
count (p.customer_no) as 人数
from price p
group by p.dept_no

结果集如下:
在这里插入图片描述

3.4 Having与Where的区别
where 子句的作用是在对查询结果进行分组前,将不符合where条件的行去掉,即在分组之前过滤数据,where条件中不能包含聚组函数,使用where条件过滤出特定的行。
having 子句的作用是筛选满足条件的组,即在分组之后过滤数据,条件中经常包含聚组函数,使用having 条件过滤出特定的组,也可以使用多个分组标准进行分组。

select
(select d.dept_name from department d where p.dept_no = d.dept_no) as 部门,
count (p.customer_no) as 人数
from price p
where p.date > “2019-05-23”
group by p.dept_no
having count(p.costomer_no) >1

结果集如下:
在这里插入图片描述

发布了38 篇原创文章 · 获赞 5 · 访问量 6040

猜你喜欢

转载自blog.csdn.net/luluisntlulu/article/details/90514494