oracle怎么进行汇总 oracle 汇总

Oracle数据库分类汇总方法

select 公司,(case when grouping(部门) = 1 then ’公司合计' else '部门' end) as 部门,sum(工资)工资总额

成都创新互联是专业的枣庄网站建设公司,枣庄接单;提供成都网站设计、成都网站制作、外贸网站建设,网页设计,网站设计,建网站,PHP网站建设等专业做网站服务;采用PHP框架,可快速的进行枣庄网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,专业的做网站团队,希望更多企业前来合作!

from    a

group by rollup(公司,部门)

;

上面这个,数据是先出(公司+部门)的组合的 key(得到该公司的每个部门的总和),最后出一个 公司 的总和(该公司所有部门总和)。

你也可以用

...

group by grouping sets(公司,部门)

得到公司的总和与部门的总和,这个略有不同,但可以通过不同的括号层次组合出你想要的,比如

...

group by grouping sets((公司,部门),公司,部门)

另外还有:

...

group by cube(公司,部门)

这个是算出每个公司的总和(不考虑哪个部门的),与每个部门的总和(不考虑哪家公司的),用 cube 汇总是用在多个公司相同的部门的时候,比如多个分公司都有财务部的话,如果你这个 DEPNO 在数据库中每家公司的每个部门都拥有完全不同的值的话就不适用。

Oracle 怎样进行数据汇总。。

select HO1110090009 ,count(1)from OM_OUTSTOCK_ITEM group by HO1110090009 ;

你试下看看这样做是不是你想要的结果。

关于Oracle一些常用脚本的汇总(2)

碎片检查

select tablespace_name sqrt(max(blocks)/sum(blocks))*

( /sqrt(sqrt(count(blocks)))) fsfi

from dba_free_space

group by tablespace_name order by ;

fsfi值越小 碎片越大 自由空间碎片索引

检查reverse_key index

select o object_name

from dba_objects o

where wner= DB_ACCT

AND O OBJECT_ID IN

(SELECT I OBJ# FROM SYS IND$ I

WHERE BITAND(I PROPERTY )= )

查具体后台进程号

select spid from v$session a v$process b where a PADDR=b ADDR and sid=

查看死锁表

SELECT SID DECODE(BLOCK NO YES ) BLOCKER

DECODE(REQUEST NO YES ) WAITER

FROM V$LOCK

WHERE REQUEST OR BLOCK

ORDER BY block DESC;

查看剩余表空间

select a tablespace_name free/total* pct_free free/ / free(M) from

(select sum(bytes) free tablespace_name from dba_free_space group by tablespace_name) a

(select sum(bytes) total tablespace_name from dba_data_files group by tablespace_name) b

where a tablespace_name=b tablespace_name

order by pct_free;

查看创建索引的进度

select sid message from  v$session_longops where sid = order by  start_time

查看缴费到帐

SELECT AREA_ID to_char(sysdate yyyy mm dd hh :mi:ss ) to_char(count( )) as cnt FROM ACCT_PAY_INTERFACE

WHERE PAY_DATE=sysdate and FLAG= group by AREA_Id

查看最消耗资源的sql

SELECT * FROM  (SELECT PARSING_USER_ID EXECUTIONS SORTS MAND_TYPE

DISK_READS  sql_text FROM v$sqlarea ORDER BY disk_reads DESC ) WHERE ROWNUM

查看占用系统资源的进程号spid

SELECT a username a machine a program a sid a serial# a status c piece c sql_text

FROM v$session a v$process b v$sqltext c WHERE b spid=  AND b addr=a paddr AND a sql_address=c address(+)

ORDER BY c piece

查看占用系统io较大的session

SELECT se sid se serial# pr SPID se username se status se terminal se program

se MODULE se sql_address st event st p text si physical_reads si block_changes

FROM v$session se  v$session_wait st v$sess_io si v$process pr WHERE st sid=se sid  AND st sid=si sid

AND se PADDR=pr ADDR AND se sid  AND st wait_time= AND st event NOT LIKE %SQL% ORDER BY physical_reads DESC

对检索出的结果的几点说明

我是按每个正在等待的session已经发生的物理读排的序 因为它与实际的IO相关

你可以看一下这些等待的进程都在忙什么 语句是否合理?

Select sql_address from v$session where sid=;

Select * from v$sqltext where address=;

执行以上两个语句便可以得到这个session的语句

你也以用alter system kill session sid serial# ;把这个session杀掉

应观注一下event这列 这是我们调优的关键一列 下面对常出现的event做以简要的说明

a buffer busy waits free buffer waits这两个参数所标识是dbwr是否够用的问题 与IO很大相关的 当v$session_wait中的free buffer wait的条目很小或没有的时侯 说明你的系统的dbwr进程决对够用 不用调整 free buffer wait的条目很多 你的系统感觉起来一定很慢 这时说明你的dbwr已经不够用了 它产生的wio已经成为你的数据库性能的瓶颈 这时的解决办法如下

a 增加写进程 同时要调整db_block_lru_latches参数

示例 修改或添加如下两个参数

db_writer_processes=

db_block_lru_latches=

a 开异步IO IBM这方面简单得多 hp则麻烦一些 可以与Hp工程师联系

b db file sequential read 指的是顺序读 即全表扫描 这也是我们应该尽量减少的部分 解决方法就是使用索引 sql调优 同时可以增大db_file_multiblock_read_count这个参数

c db file scattered read 这个参数指的是通过索引来读取 同样可以通过增加db_file_multiblock_read_count这个参数来提高性能

d latch free 与栓相关的了 需要专门调节

e 其他参数可以不特别观注

外部联接 + 的用法

外部联接 + 按其在 = 的左边或右边分左联接和右联接

若不带 + 运算符的表中的一个行不直接匹配于带 + 预算符的表中的任何行

则前者的行与后者中的一个空行相匹配并被返回 若二者均不带 +

则二者中无法匹配的均被返回 利用外部联接 +

可以替代效率十分低下的 not in 运算 大大提高运行速度 例如 下面这条命令执行起来很慢

select a empno from emp a where a empno not in

(select empno from emp where job= SALE );

倘若利用外部联接 改写命令如下:

select a empno from emp a emp b

where a empno=b empno(+)

and b empno is null

and b job= SALE ;

可以发现 运行速度明显提高

如何更改UNDO tablespace

create undo tablespace undotbs datafile D:\oracle\product\ \oradata\qa\undotbs dbf size M;

alter system set undo_tablespace=undotbs scope=both;

create pfile from spfile;

alter tablespace undotbs offline;

drop tablespace undotbs including contents;

将表改成

ALTER   TABLE   t_monitor_real_minute   NOLOGGING;

Oracle RAC的参数文件和单实例参数文件不同 所以修改参数文件时需要注意

首先设置归档路径

SQL alter system set log_archive_dest= /opt/oracle/archive scope=spfile sid= * ;

System altered

SQL select sid name value from v$spparameter where name= log_archive_dest ;

SID        NAME                 VALUE

*          log_archive_dest     /opt/oracle/archive

然后关闭两个实例 启动实例 更改数据库为归档模式

SQL shutdown immediate;

Database closed

Database di *** ounted

ORACLE instance shut down

SQL startup mount;

ORACLE instance started

Total System Global Area bytes

Fixed Size                  bytes

Variable Size             bytes

Database Buffers          bytes

Redo Buffers               bytes

Database mounted

SQL alter database archivelog;

Database altered

SQL alter database open;

Database altered

SQL archive log list;

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /opt/oracle/archive

Oldest online log sequence    

Next log sequence to archive  

Current log sequence          

lishixinzhi/Article/program/Oracle/201311/17504


本文名称:oracle怎么进行汇总 oracle 汇总
文章转载:http://scyanting.com/article/hjcjje.html