实战05 开发之常用函数
五个实战系列所有的课程:
本课重点:都是oracle的内置函数
1、聚合函数-数据统计
(1)max 取列和表达式最大值
select max(salary)from yg;
select max(distinct salary)from yg;遇见重复的,只取一次值
(2)min 取列和表达式最小值
select min(salary)from yg;
select min(distinct salary)from yg;
(3)avg 取列和表达式平均值
select avg(salary)from yg;
select avg(distinct salary)from yg;
(4)sum 求列和表达式总和
统计每个部门的总工资
select department_id,sum(salary) from yg group by department_id order by 2 desc;
(5)count 求行数总和
select count(*) from yg;
select count(*) from yg where manager_id =120;
select count(distinct manager_id) from yg;
(6)其他:标准差stddev、协方差、中位数
2、分组函数 group by ,having
group by (分组统计)+ having(限制分组显示结果)+ max
(1)简单的分组函数应用
统计各个国家名字的长度length、avg、round(四舍五入)
select country_name,length(country_name)from gj group by country_name;
(2)多列分组数据
日期到字符的转换函数,--to_char,count
select to_char(end_date,'yyyy') year,job_id,count(*)from jl group by to_char(end_date,'yyyy'),job_id order by 1;
(3)使用having子句
1.对行进行分组 2.应用组函数 3.显示符合having子句条件的组
查招聘大于等于15个员工在星期几:
select to_char(hire_date,'Day') 星期几,count(*) from yg group by to_char(hire_date,'Day')having count(*) >=15;
统计部门里最大工资大于10000的
select department_id,max(salary)from yg group by department_id having max(salary) >10000 order by 2;
3、字符函数--运算和截取
3.1 round(n,[m])m等于0表示整数,m<0小数点的前m位,m>0小数点的后m位。
select salary,salary+0.2 from yg;
select salary,round(salary+0.2) from yg;
select salary,round((salary+0.867),-4) from yg;
select salary,round((salary+0.867),2) from yg;
3.2 trunc(n,[m]) 截取数字 m等于0表示去掉小数位,m<0小数点的前m位,m>0小数点的后m位。
select salary,trunc(salary+0.2) from yg;
select salary,trunc((salary+0.867),2) from yg;
3.3 ceil(n)返回大于等于数字n的最小整数。
3.4 floor(n) 返回小于等于数字n的最小整数
3.5 length(n) 返回字符串的长度
4、转换函数--大小写转换
4.1 lower 小写转换
select first_name,last_name from yg where first_name like '%li%';
select first_name,last_name from yg where lower(first_name) like '%li%';
4.2 upper 转换为大写
4.3 initcap 将第一个字母大写,其余的都小写
4.4 综合运用
5、转换函数--日期字符数字转换
5.1 to_char 把日期数字转换为字符串
5.2 to_date 把字符串转换为数据库中的日期类型
--Year: yy 16,yyy 016,yyyy 2016
--Month: mm 11,mon 11月/nov,month 11月/november
--Day: dd 当月第几天 02,ddd 当年第几天 02,dy 当周第几天 星期五/fri,day 当周第几天 星期五/friday
---Hour: hh 12小时进制 01,hh24 24小时进制 13
--24小时的时间范围: 0:00:00 -23:59:59,12小时的时间范围不怎么用
---Minute: mi 60进制 45
---Second: ss 60进制 25
select to_char(sysdate,'yyyy-mm-dd hh24:mi:ss') from dual;
5.3 to_number 把字符转换为数字
6、日期函数
6.1 sysdate查询系统当前时间
select sysdate from dual;
6.2 add_months 增加/减去月份
select add_months(sysdate,-1) from dual;
select add_months(sysdate,+1)from dual;
6.3 last_day 返回日期的最后一天
select last_day(add_months(sysdate,+1)) from dual;
6.4 months_between 时间2-时间1的月份
6.5 next_day
星期日=1,一=2,依次类推
6.6 current_date 当前日期
6.7 current_timestamp 当期的日期
6.8 sessiontimezone 时区
6.9 trunc(for date)
select trunc(sysdate,'YYYY') from dual;
select trunc(sysdate,'MM') from dual;
select trunc(sysdate,'D') from dual;
7、集合函数--合并两张表
7.1 union(无重并集,去重排序)
7.2 union all(有重并集,不去重排序)
7.3 intersect (交集)
7.4 minus (差集)
8、分析函数-使用decode函数
decode(条件,值1,返回值1,值2,返回值2,)