简单统计group by rollup运用
有表A:A1 A2 A31 1 21 2 32 1 32 2 13 1 43 2 5要求结果:A1 A2 A31 1 21 2 3合计: 52 1 32 2 1合计: 43 1
1,2,3层.......
VALUENAME IDS FCLASS------------------------------ ---------- ----------value1 1 0value21 2 1value22 3 1value31 4 2想要的结果:将表转化成这种形式:VALUENAME VALUENAME VALUENAME------------------------------ ------------------------------ ------------------------------value1 va
row_number() over(partition by c order by a, b) 秒用
一张表中,比如表1,字段a,字段b,字段c对于同一个C,取最小的A当A相等的情况下,取最小的B。select a, b, c from (select ttt.*, row_number() over(partition by c order by a, b) rn from ttt)where rn = 1[@more@]
借书记录
SQL编写问题借书记录 BORROW(ID,BNUM,BTIME,BFLAG) 借书证号,书号,借阅日期时间,借还标志(‘B' 借书 'R' 还书 )求某段时间内(2009-01-01 到 2009-03-01 ) 只借书不还书的 借书证号?[@more@]一.....SELECT IDFROM (SELECT ID,COUNT(DECODE(BFLAG,'B',ID)) AS B_CNT,COUNT(DECODE(BFLAG,'R',ID)) AS R_CNTFROM BORROWWHERE BTIME BETWEEN DATE '2009-01-01' AND DATE '2009-03-01'GROUP BY ID)WHERE B_CNT>0 AND R_CNT=0;二...SELECT *FROM BORROW b1 WHERE b1.btime BETWEEN to_date('2009-01-01','yyyy-mm-dd') and to_date('2
最大值----1
能用一条语句实现用分值最大的记录去更新某一列我们经常碰到这样的问题,表A有字段xh,xm,km,一个xh只有一条记录,表B有字段xh,km,score,一个学号有多条记录。xh=学号,xm=姓名,km=科目,score=分数。目的:取得学生成绩最好的一门科目名称现在,要根据xh取B表中最大的score的记录的km,去更新A表的km。update Aset A.km = (select B.kmfrom Bwhere B.xh = A.xhand rownum = 1order by B.score desc);稍微有点常识的朋友都会知道上面的语句是存在问题的。上面取出来的km并不是score最大的那条记录的km。但是,这样写也是不行的。update A
截取字符串
http://www.itpub.net/viewthread.php?tid=1153291&extra=&page=2方法一: select case when length(str) < 5 then &str else substr(str, 1, length(str) - 5 + 1) end result from t; 方法二: select reverse(substr(reverse('ssssssghgjknmhloirot'),5)) ff from dual [@more@]
转:巧用decode() 和 sign()
转:http://www.itpub.net/viewthread.php?tid=1048370&extra=page%3D1%26amp%3Bfilter%3Ddigest这两函数我都用过,可这个组合咋没想到,记录下..巧用decode() 和 sign()[@more@]巧用decode() 和 sign()简单回顾一下这两个函数1.DECODE(exp,s1,r1,s2,r2..s,r) 可以把它理解成一个增强型的if else,只不过它并不通过多行语句,而是在一个函数内实现if else的功能。2.sign(exp) 判断正负数的,如果exp为负数则返回-1,为正数则返回1,为0则返回0;exp可以为number也可以为表达式。这两个函数都是非常重要的函数也是比较常用的函数,估计大家
转..sql语句及优化原则 2
Sql优化是一项复杂的工作,以下的一些基本原则是本人看书时所记录下来的,很明确且没什么废话: 1. 索引的使用: (1).当插入的数据为数据表中的记录数量的10%以上,首先需要删除该表的索引来提高数据的插入效率,当数据插入后,再建立索引。[@more@](2).避免在索引列上使用函数或计算,在where子句中,如果索引是函数的一部分,优化器将不再使用索引而使用全表扫描。如: 低效:select * from dept where sal*12 >2500; 高效:select * from dept where sal>2500/12; (3).避免在索引列上使用not和 “!=”,索引只
转.sql语句优化的原则1
优化数据库的思想: ***********===== 1、关键字段建立索引。 2、使用存储过程,它使SQL变得更加灵活和高效。 3、备份数据库和清除垃圾数据。 4、SQL语句语法的优化。(可以用Sybase的SQL Expert,可惜我没找到unexpired的序列号) 5、清理删除日志。 SQL语句优化的原则: ****************** 1、使用索引来更快地遍历表。 缺省情况下建立的索引是非群集索引,但有时它并不是最佳的。在非群集索引下,数据在物理上随机存放在数据页上。合理的索引设计要建立在对各种查询的分析和预测上。一般来说:[@more@
转载:检查Oracle数据库中不合理的sql语句
检查Oracle数据库中不合理的sql语句 代码: select sql_text ,sharable_mem from v$sql where sharable_mem > ‘100000′ order by sharable_mem ; 上面的sql语句是查询shared pool中占用内存超过100K的sql语句。 这个sql可以非常有效的检查出Oracle shared pool中那些严重占用内存的sql,根据我的经验,绝大多数有问题的sql语句都会在这里留下痕迹,通过在这里找出有问题的sql语句并进行修改,再反复运行这个sql脚本,直到所以有问题的sql都处理完毕,这就是对Oracle数据库在sql上面的最好的优化,可以保证不会因为程序员的