常用的6个分组函数: 注意点:where字句中不能使用组函数。要用到having函数。 但是从优化角度看,尽量使用where
avg :平均值 sum:求和 min:最小值 max:最大值 count:求个数 wm_concat:行转列 nvl(列名,0)空置给0
例子1:select avg(列名),sum(列名) from 表名; -----> 查询表名里面某列的平均值以及求和 。 最小只和最大值,count 一样 count可以写(*)。count(distinct 列名) 这个可以去重复
例子2:select 列名1, wm_concat(列名2) from 表名 group by 列名1;
这个是按找列名1 查询列名2 的数据并把列名2的数据进行行转列
例子3:select count(*),count(nvl(列名,0)) from 表名; 计算个数时,空值计算到
group by 语句:
例: select 列名1,avg(列名2) from 表名 group by 列名1;
意思就是按照列名1分组查询列名2的平均值
格式:select a,组函数(x) form 表名 group by a; 注意;所有没有包含在函数的列都要跟在group by 后面
order by 排序
例: select 列名1,列名2,avg(列名2) from 表名 group by 列名1,列名2 order by 列名1;
查询出来之后按列名1 进行排序 便于查看
默认是升序,后面加上 空格 desc 就是降序
例:select 列名1,列名2,avg(列名2) from 表名 group by 列名1,列名2 order by 列名1 desc;
where 和having
例: select 列名1, avg(列名2) from 表名 group by 列名1 having 列名1 =X;
select 列名1, avg(列名2) from 表名 where 列名1 =X group by 列名1 ;
这两条语句执行结果是一样的。前者是先分组在过滤。后者是先过滤在分组。 我们优先用后者
别名例:
SELECT a.XXX_id 分拨的ID,a.XXX_name 分拨 FROM XXAXX a where a.XXX_name in ('南通分拨中心','淮安分拨中心','芜湖分拨中心',
'蚌埠分拨中心','杭州分拨中心','温州分拨中心','宁波分拨中心') order by 分拨的ID
--这样的例子是木有意义的,只是一个例子
也可以order by 1 意思是查询列的第一个列
SELECT a.XXX_id 分拨的ID,a.XXX_name 分拨 FROM XXAXX a where a.XXX_name in ('南通分拨中心','淮安分拨中心','芜湖分拨中心',
'蚌埠分拨中心','杭州分拨中心','温州分拨中心','宁波分拨中心') order by 1
这样的效果是一样的
分组函数嵌套:
例: select max(avg(列名) ) from 表名;
剩下的再补充