勿传网上!严禁谋利! Oracle学习笔记
常彦博
七、SQL语句中的分支
7.1分支表达式
1)case when (then),用于解决不同记录需要不同处理方式的问题。when后面跟条件表达式,当所有when条件都不满足时,若有else,表达式的返回结果为其后的值,否则返回null值。
2)寻找when的优先级:从上到下再多的when,也只有一个出口,即其中有一个满足了表达式expr就马上退出case。
3)else expr和return expr的数据类型必须相同。 eg:当月包在线时长为20小时,单位费用涨5分,为40小时涨3分,其他不变(用CASE WHEN实现) select base_duration,unit_cost,case when base_duration=20 then unit_cost+0.05 when base_duration=40 then unit_cost+0.03 else unit_cost end new_nuit_cost from cost; 7.2分支函数 decode,是简版的case when。 1)decode(value,if1,then1,if2,then2,??,else)标识如果value等于if1时,返回then1。如果不等于任何一个if值,则返回else。 eg:当月包在线时长为20小时,单位费用涨5分,为40小时涨3分,其他不变(用decode实现) select base_duration,unit_cost,decode(base_duration,20,unit_cost+0.05, 40,unit_cost+0.03, unit_cost) n_base_cost from cost; 15
勿传网上!严禁谋利! Oracle学习笔记
常彦博
八、组函数
操作在一组行(记录)上,每组返回一个结果。
8.1报表统计常用
1)avg(distinct|all|n):平均值,参数类型只能为number。 2)sum(distinct|all|n):求和,参数类型只能为number。
3)count(distinct|all|expr|*):计数,参数类型为number、字符、date。 4)max(distinct|all|expr):最大值,参数类型为number、字符、date。 5)min(distinct|all|expr):最小值 ,参数类型为number、字符、date。 ? 注意事项: ? distinct去重复时,会保留一个。 select count(distinct base_duration)from cost;//4,distinct保留一个空,但count统计时不算 ? count(*)不管null,统计“记录”数。 ? count(列名)返回的是列中非null值的数量。 8.2缺省情况组函数处理什么值 所有的非空值。 8.3当组函数要处理的所有值都为null时 count函数返回0,其他函数返回null。 8.4行级信息和组级信息 返回的结果集包含多条记录,是行级信息;返回的结果集包含一条记录,是统计汇总信息,是组级别的信息;两者不能同时显示出来! 处理方式:将行级信息变成组标识或进行组函数处理。 eg1:单位费用的总和、平均值、最大值、最小值个数 select sum(unit_cost) sum1,avg(unit_cost) avg1,max(unit_cost) max1, min(unit_cost) min1,count(unit_cost) cnt from