oracle学习 函数

来源:互联网 发布:网络歌曲大全2017视频 编辑:程序博客网 时间:2024/06/09 16:51


聚合函数  count -- 求个数   sum   -- 求和   avg   -- 求平均   max  min
select max(sal) from emp;    //--求最高工资
select sum(sal),count(sal),avg(sal) from emp;    //--总工资

分组聚合
一旦使用了group by子句,则select后只能跟分组列及聚合函数
SQL> select deptno,sum(sal) from emp group by deptno;    //--按照部分分组,求每组的总工资

    DEPTNO   SUM(SAL)
---------- ----------
        30       9400
        20       6775
        10       8750

重点:where groupby having的关系.  必须先写where 然后groupby 最后having
执行上,先执行where --- 筛选纪录  后执行groupby -- 对筛选出的纪录进行分组, 最后执行having -- 筛选组

SQL> select job,avg(sal) from emp where sal>900 group by job having avg(sal)>2000;    //-- 将所有900元以上的员工,按照工种分组,取平均工资高于2000的组

JOB                  AVG(SAL)
------------------ ----------
PRESIDENT                5000
MANAGER            2758.33333
ANALYST                  3000

学习distinct使用--消除重复
SQL> select distinct job from emp;    //-- 查找所有的工种

SQL> select sum(distinct sal),count(distinct sal),avg(distinct sal) from emp;    //distinct与聚合函数配合,不统计重复值。

SUM(DISTINCTSAL) COUNT(DISTINCTSAL) AVG(DISTINCTSAL)
---------------- ------------------ ----------------
           23675                 11       2152.27273

SQL> select substr(ename,2,3) from emp;    //--1,例:提取 7654 号雇员姓名的 2-4位

round函数的使用。
SQL> select round(12.46) from dual;

SQL> select round(12345.46,2) from dual;
ROUND(12345.46,2)
-----------------
         12345.46
 
SQL> select round(12345.46,1) from dual;
ROUND(12345.46,1)
-----------------
          12345.5
 
SQL> select round(12345.46,0) from dual;
ROUND(12345.46,0)
-----------------
            12345
 
SQL> select round(12345.46,-2) from dual;
ROUND(12345.46,-2)
------------------
             12300
 
to_char -- 将数值或者时间转换为char型
SQL> select to_char(12345.6789,'$999,999,999.999') from dual;    //--以货币形式显示sal列
TO_CHAR(12345.6789,'$999,999,9
------------------------------
      $12,345.679
 
SQL> select to_char(12345.6789,'$000,000,000.000') from dual;
TO_CHAR(12345.6789,'$000,000,0
------------------------------
 $000,012,345.679


SQL> select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;    //--显示时间 -- 重要
TO_CHAR(SYSDATE,'YYYY-MM-DDHH:
------------------------------
2011-06-27 09:21:52
 
SQL> select to_char(sysdate,'yyyy"年"mm"月"dd"日" hh:mi:ss') from dual;
TO_CHAR(SYSDATE,'YYYY"年"MM"月
------------------------------
2011年06月27日 09:22:30

SQL> select * from emp where hiredate>to_date('1981-4-01','yyyy-mm-dd');    //--查找入职时间在1981-4-01后的员工:

SQL> select * from emp where hiredate=last_day(hiredate)-2;    //--7.找出各月倒数第3天受雇的所有员工.

SQL> select * from emp where hiredate<add_months(sysdate,-30*12);    //--8.找出早于30年前受雇的员工.

SQL> select * from emp where length(ename)=5;    //--10.显示正好为5个字符的员工的姓名.

SQL> select * from emp where ename not like '%T%';    //--11.显示不带有"T"的员工的姓名.

SQL> select * from emp where to_char(hiredate,'mm')='02';    //--16.找出在(任何年份的)2月受聘的所有员工。

SQL> select sysdate-hiredate from emp;    //--17.对于每个员工,显示其加入公司的天数.



--返回字符串字母小写,字母大写,字符串的长度,截取字符串 
select lower('abcBCD'), upper('abcBCD'), length('abcBCD'), substr('abcBCD',2,8) from dual;  
select concat('ab','cd') from dual; --链接两个字符

select round(2345.67) from dual; --四舍五入 返回2346 

select to_char(add_months(to_date('1999-12-12','yyyy-MM-dd'),2),'yyyy-MM-dd') from dual;  --日期增加2个月,返回2000-02-12 
select to_char(add_months(to_date('1999-12-12','yyyy-MM-dd'),-2),'yyyy-MM-dd') from dual;  --日期减少2个月,返回1999-10-12 
select add_months(sysdate,100),sysdate from dual; --返回2022/12/8 15:57:37, 2014/8/8 15:57:37
select to_char(sysdate,'yyyy-MM-dd'),to_char((sysdate)+1,'yyyy-MM-dd') from dual;  --返回当前日期,和当前日期的下一天日期 
select last_day(sysdate) from dual;  -- 返回当前时间的最后一天时间,例如:2014/8/31 14:44:47 
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual; -- 获取星期几 这里返回:星期一
select to_char(sysdate,'day') from dual; -- 获取星期几 这里返回:星期五

avg():求平均值   
max():最大值   
min():最小值   
sum():求和,数值相加结果   
count():统计查询数据条数 

select (case when t.type='6' then '投标失败' else t.type end) from u_capital_record t group by t.type;  --case语句 



聚合函数  count -- 求个数   sum   -- 求和   avg   -- 求平均   max  min
select max(sal) from emp;    //--求最高工资
select sum(sal),count(sal),avg(sal) from emp;    //--总工资

分组聚合
一旦使用了group by子句,则select后只能跟分组列及聚合函数
SQL> select deptno,sum(sal) from emp group by deptno;    //--按照部分分组,求每组的总工资

    DEPTNO   SUM(SAL)
---------- ----------
        30       9400
        20       6775
        10       8750

重点:where groupby having的关系.  必须先写where 然后groupby 最后having
执行上,先执行where --- 筛选纪录  后执行groupby -- 对筛选出的纪录进行分组, 最后执行having -- 筛选组

SQL> select job,avg(sal) from emp where sal>900 group by job having avg(sal)>2000;    //-- 将所有900元以上的员工,按照工种分组,取平均工资高于2000的组

JOB                  AVG(SAL)
------------------ ----------
PRESIDENT                5000
MANAGER            2758.33333
ANALYST                  3000

学习distinct使用--消除重复
SQL> select distinct job from emp;    //-- 查找所有的工种

SQL> select sum(distinct sal),count(distinct sal),avg(distinct sal) from emp;    //distinct与聚合函数配合,不统计重复值。

SUM(DISTINCTSAL) COUNT(DISTINCTSAL) AVG(DISTINCTSAL)
---------------- ------------------ ----------------
           23675                 11       2152.27273

SQL> select substr(ename,2,3) from emp;    //--1,例:提取 7654 号雇员姓名的 2-4位

round函数的使用。
SQL> select round(12.46) from dual;

SQL> select round(12345.46,2) from dual;
ROUND(12345.46,2)
-----------------
         12345.46
 
SQL> select round(12345.46,1) from dual;
ROUND(12345.46,1)
-----------------
          12345.5
 
SQL> select round(12345.46,0) from dual;
ROUND(12345.46,0)
-----------------
            12345
 
SQL> select round(12345.46,-2) from dual;
ROUND(12345.46,-2)
------------------
             12300
 
to_char -- 将数值或者时间转换为char型
SQL> select to_char(12345.6789,'$999,999,999.999') from dual;    //--以货币形式显示sal列
TO_CHAR(12345.6789,'$999,999,9
------------------------------
      $12,345.679
 
SQL> select to_char(12345.6789,'$000,000,000.000') from dual;
TO_CHAR(12345.6789,'$000,000,0
------------------------------
 $000,012,345.679


SQL> select to_char(sysdate,'yyyy-mm-dd hh:mi:ss') from dual;    //--显示时间 -- 重要
TO_CHAR(SYSDATE,'YYYY-MM-DDHH:
------------------------------
2011-06-27 09:21:52
 
SQL> select to_char(sysdate,'yyyy"年"mm"月"dd"日" hh:mi:ss') from dual;
TO_CHAR(SYSDATE,'YYYY"年"MM"月
------------------------------
2011年06月27日 09:22:30

SQL> select * from emp where hiredate>to_date('1981-4-01','yyyy-mm-dd');    //--查找入职时间在1981-4-01后的员工:

SQL> select * from emp where hiredate=last_day(hiredate)-2;    //--7.找出各月倒数第3天受雇的所有员工.

SQL> select * from emp where hiredate<add_months(sysdate,-30*12);    //--8.找出早于30年前受雇的员工.

SQL> select * from emp where length(ename)=5;    //--10.显示正好为5个字符的员工的姓名.

SQL> select * from emp where ename not like '%T%';    //--11.显示不带有"T"的员工的姓名.

SQL> select * from emp where to_char(hiredate,'mm')='02';    //--16.找出在(任何年份的)2月受聘的所有员工。

SQL> select sysdate-hiredate from emp;    //--17.对于每个员工,显示其加入公司的天数.



--返回字符串字母小写,字母大写,字符串的长度,截取字符串 
select lower('abcBCD'), upper('abcBCD'), length('abcBCD'), substr('abcBCD',2,8) from dual;  
select concat('ab','cd') from dual; --链接两个字符

select round(2345.67) from dual; --四舍五入 返回2346 

select to_char(add_months(to_date('1999-12-12','yyyy-MM-dd'),2),'yyyy-MM-dd') from dual;  --日期增加2个月,返回2000-02-12 
select to_char(add_months(to_date('1999-12-12','yyyy-MM-dd'),-2),'yyyy-MM-dd') from dual;  --日期减少2个月,返回1999-10-12 
select add_months(sysdate,100),sysdate from dual; --返回2022/12/8 15:57:37, 2014/8/8 15:57:37
select to_char(sysdate,'yyyy-MM-dd'),to_char((sysdate)+1,'yyyy-MM-dd') from dual;  --返回当前日期,和当前日期的下一天日期 
select last_day(sysdate) from dual;  -- 返回当前时间的最后一天时间,例如:2014/8/31 14:44:47 
select to_char(to_date('2002-08-26','yyyy-mm-dd'),'day') from dual; -- 获取星期几 这里返回:星期一
select to_char(sysdate,'day') from dual; -- 获取星期几 这里返回:星期五

avg():求平均值   
max():最大值   
min():最小值   
sum():求和,数值相加结果   
count():统计查询数据条数 

select (case when t.type='6' then '投标失败' else t.type end) from u_capital_record t group by t.type;  --case语句 



0 0
原创粉丝点击