oracle 常用(一)

时间:2023-11-10 15:11:26

常用的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

oracle 常用(一)

   --这样的例子是木有意义的,只是一个例子

也可以order  by  1  意思是查询列的第一个列

SELECT a.XXX_id 分拨的ID,a.XXX_name 分拨 FROM XXAXX a where a.XXX_name in ('南通分拨中心','淮安分拨中心','芜湖分拨中心',
'蚌埠分拨中心','杭州分拨中心','温州分拨中心','宁波分拨中心') order by 1

oracle 常用(一)

这样的效果是一样的

分组函数嵌套:

例: select max(avg(列名) ) from 表名;

剩下的再补充