oracle比较decode(case when) 、4种去重---和去重中的统计函数.doc_第1页
oracle比较decode(case when) 、4种去重---和去重中的统计函数.doc_第2页
oracle比较decode(case when) 、4种去重---和去重中的统计函数.doc_第3页
oracle比较decode(case when) 、4种去重---和去重中的统计函数.doc_第4页
oracle比较decode(case when) 、4种去重---和去重中的统计函数.doc_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

oracle比较decode/case when 、4种去重和去重中的统计函数一: decode 和 case whendecode (expression, search_1, result_1, search_2, result_2, ., search_n, result_n, default) decode函数比较表达式和搜索字,如果匹配,返回结果;如果不匹配,返回default值;如果未定义default值,则返回空值。 select username,decode(lock_date,null,unlocked,locked) status from t; -如果lock_date是null就返回unlocked 如果不是null就返回lockedselect username,decode(lock_date,null,unlocked) status from t;-如果lock_date是null就返回unlocked 否则是空(因为没有定义)例如有个学生表. 行转列-create table score2(name varchar2(10),Language number(3),Math number(3),English number(3); insert into score2 values(Zhang,80,67,95);insert into score2 values(Li,79,84,62);insert into score2(name,Language) values(Chen,88);commit; Select * from score2; 显示成报表的格式.select name,sum(decode(subject,Language, grade,0) Language,sum(decode(subject,Math, grade,0) Math,sum(decode(subject,English, grade,0) Englishfrom scoregroup by name;NAME Language Math English- - - -Zhang 80 92 76Wang 73 0 0Li 81 95 50第二列,如果 subject=Language,那么就显示成绩,否则显示为0第三列,如果 subject=Math,那么就显示成绩,否则显示为0第四列,如果 subject=English,那么就显示成绩,否则显示为0Case when Case selector -selector可以不设置 When id=1 THEN id是1; ELSE 没有id值;END CASE; -如果ID=1 就显示id是1 否则显示没有id值上面用case when显示.select , sum( case when t.subject = Language then t.grade else 0 end ) dd, sum( case when t.subject = Math then t.grade else 0 end ) Math, sum( case when t.subject = English then t.grade else 0 end ) English from score t group by ;二:去重的4中方法create table test (c1 int ,c2 varchar2(10);insert into test values (1,Smith);insert into test values (1,Smith);insert into test values (2,John);insert into test values(1,Jack);insert into test values (2,Jack);insert into test values (2,John);insert into test values (2,John);commit;一种方法: distinct 把之前的表去重显示并创建,drop table old_table;create table tmp_test as select distinct * from test1; -创建临时表drop table test1;alter table tmp_test rename to test1;第二种 rowid delete from test where rowid ( select min(rowid) from test b where b.c1 = test.c1 and b.c2 = test.c2 )第三种方法:分组,rowiddelete from test t where t.rowid not in (select min(rowid) from test group by c1,c2 );commit;Rowid为伪列 是物理地址OOOOOO: 数据库对象号FFF: 表空间相关的数据文件号(相对文件号)BBBBBB: 数据块号RRR: 在块中的行号第四种方法,分析函数 dense_rank()drop table test;create table test (c1 int ,c2 varchar2(10);insert into test values (1,Smith);insert into test values (1,Smith);insert into test values (2,John);insert into test values(1,Jack);insert into test values (2,Jack);insert into test values (2,John);insert into test values (2,John);commit;select c1,c2,rowid rd,row_number() over(partition by c1,c2 order by c1) rn from test;不重复的只有1重复的就会出现2,3,4第一次出现,不重复的时候,rn为1相同的记录,重复出现,第二次,就记录为2第三次,3怎么找不出重复的行select b.c1,b.c2 from 和县在线:/ (select c1,c2,rowid rd,row_number() over(partition by c1,c2 order by c1) rn from test) b where b.rn = 1;不等于号 用了不走索引 效率很低分页 row_number要求emp表中的5-10的记录?select * from(select a.*,row_number() over(order by empno desc) rk from emp a) where rk=5;select rn,empno,ename from (select rownum rn,empno,ename from emp) where rn=5 and rn=10;select * from (select deptno,ename,sal,dense_rank() over(partition by deptno order by sal desc) rk from emp) where rk发现部门为20的scott 和ford都是3k,所以并列第一 有2.3名select * from (select deptno,ename,sal,rank() over(partition by deptno order by sal desc) rk from emp ) where rk发现部门为20的scott 和ford都是3k,所以并列第一 没2有3名Partition by = group by 分析函数里用的是 partition by 普通函数 用的是 group by select * from(select deptno,ename,sal,row_number() over(partition by deptno order by sal desc) rn from emp) where rn发现部门为20的scott 和ford按照默认显示出现1和2 名次那么看下这些区别:select * from(select deptno,ename,sal,row_number() over(partition by deptno order by sal desc)

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论