oracle group by 行转列 分析执行计划

group by 子句将行划分成较小的组,然后,使用聚组函数返回每一个组的汇总信息,另外,可以使用having子句 限制返回的结果集
类似于distinct的去重,可是不明白到底俩区别?功能上group by莫非多一下可以用having?

GROUP BY ROLLUP(A,B,C):首先对(A,B,C)进行GROUP BY,然后对(A,B)进行GROUP BY,然后是(A)进行GROUP BY, 最后对全表进行GROUP BY操作。
GROUP BY CUBE(A,B,C):首先对(A,B,C)进行GROUP BY,然后依次对(A,B)、(A,C)、(A)、(B,C)、(B)、(C)进行GROUP BY,最后对全表进行GROUP BY操作。

GROUP BY GROUPING SETS(A,B,C):依次对(C)、(B)、(A)进行GROUP BY。
----参见博客
http://blog.csdn.net/ayou2008/article/details/7183258
http://www.cnblogs.com/juddhu/archive/2012/03/07/2383685.html
Oracle 行转列问题
decode(待比较的对象,如果为这个,那麼结果为这个,否则结果是这个)
DECODE(value, if1, then1, if2,then2, if3,then3, . . . else )
DECODE(command,
  0,’None’,
  2,’Insert’,
  3,’Select’,
  6,’Update’,
  7,’Delete’,
  8,’Drop’,
  ‘Other’) command

关于pl/sql的分析执行计划,有话可以从耗时开始
对于耗时多,可是执行之间短的问题,如何取舍?

 

 

select t.*, t.rowid from TEST t;

select km,sum(decode(name,'张三',fs,0))张三
,sum(decode(name,'李四',fs,0))李四
,sum(decode(name,'王五',fs,0))王五
,sum(decode(name,'陈三',fs,0))陈三
from
(
select name,'SX' km,sx fs
from test
union all
select name ,'yw' km,yw fs
from test test1
)t
group by km

posted @ 2012-11-23 09:09  Dzs  阅读(1934)  评论(0编辑  收藏  举报