分组函数用法:
group by 列;
select type from hello group by type;
先来一张基础表:
问题1:比如我想查询数据中有多少个家庭地址。可以利用分组函数 group by 列;
select type 家庭地址 from hello group by type;
分组函数会把重复的数据过滤掉,然后查询出来。
问题2:查询同一个家庭地址有两个人的数据;
select type 家庭地址 from hello group by type having count(*) >1;
如果对分组进行条件判断需要使用 having 函数。
问题3:查询每个人的家庭地址。
select y_name,type from hello group by y_name,type;
需要注意的是,如果使用的分组函数,则不可以返回其他普通列的数据。
如:
如果分组列是type列。返回结果是y_name和type列,就会出现上图的错误。
如果想显示y_name的列,需要把y_name列分组,就可以显示y_name列数据。
select y_name,type from hello group by y_name,type;
GROUP BY 子句
- 出现在 SELECT 列表中的字段或者出现在 order by 后面的字段,如果不是包含在分组函数中,那么该字段必须同时在 GROUP BY 子句中出现
- 包含在 GROUP BY 子句中的字段则不必须出现在 SELECT 列表中
- 可使用 where 字句限定查询条件
- 可使用 Order by 子句指定排序方式
- 如果没有 GROUP BY 子句, SELECT 列表中不允许出现字段(单行函数)与分组函数混用的情况
Select avg(comm) from emp;--平均值
Select max(comm) from emp; --最大值
Select min(comm) from emp;
--最小值
Select sum(comm) from emp;
--总和
--分组列中空值,可使用Nvl()函数强制分组函数处理空值
select avg(nvl(comm, 0)) from emp;