1.avg()
求平均值
求指定列的平均值,如果求多个列的平均值需要多个avg()
实例:
select avg(t.c1) from hjj t where t.name='SD.MY';
指的是在hjj这个表当中当name字段等于'SD.MY'时,c1列的平均值
2.count()
统计指定列的行数
实例:
select count(*),count(t.c1) from hjj t where t.name='SD.MY';
在上句当中,假如一个表当中,即使表中的c1列有为空的部分,则利用count(*)也会将所有的列的数量统计出来,包含了空的部分,但是如果用count(c1)的话,只会将c1有值的部分统计出来。
3.max()、min()
求最大值、最小值
实例:
select max(t.c1),min(t.c1)from hjj t;
提取出c1列中的最大值 、最小值
4.sum()
求一列的和
实例:
select sum(t.c1) from hjj t;
5.wm_concat()
转字符合并
①把以下图中Name一样的数据合并为一条,而且NO的值要这样显示如 C.1,C.2
②实现这种效果的操作如下,先把Name的值进行分组(group by),再把NO的值用 wm_concat()函数合并起来(注意:记得要to_char(),要不然数据显示不出来,而且会显示成<CLOB>)
实例:
select t.name,to_char(wm_concat(distinct(t.nos))) from hjj_wm_concat group by t.name;
安全管理 | c1,c2,c5 |
文明施工 | c3,c4 |
6.distinct()
去重函数,在表中,可能会包含重复值。这并不成问题,不过,有时您也许希望仅仅列出不同(distinct)的值。关键词 distinct用于返回唯一不同的值。
可用于单列去重
select distinct name from A
可多列去重
select distinct name,id from A
例如:
根据第三个表格可以理解为是name 和id两个字段共同作用的结果,可以理解为唯一映射
7.group by rollup()
Oracle group by高级用法对比效果(ROLLUP、GROUPING SETS、CUBE),今天主要跟大家演示一下,在同一组数据的情况下,每个SQL的执行结果。
①:普通的group by
②:加上ROLLUP
③:加上CUBE
④:加上GROUPING SETS
总结如下:
ROLLUP | GROUP BY ROLLUP(A,B,C) | 首先对(A,B,C)进行GROUP BY,然后对(A,B)进行GROUP BY,然后是(A)进行GROUP BY, 最后对全表进行GROUP BY操作 |
CUBE | GROUP BY CUBE(A,B,C) | 首先对(A,B,C)进行GROUP BY,然后依次对(A,B)、(A,C)、(A)、(B,C)、(B)、(C)进行GROUP BY,最后对全表进行GROUP BY操作。 |
GROUPING SETS | GROUP BY GROUPING SETS(A,B,C) | 依次对(C)、(B)、(A)进行GROUP BY。 |
另外,在SQL中可以直接用加减乘除语句进行运算