oracle 取指定两行记录差值sql

在获取指定两行的差值,我以前都是两个表进行join,再相减,偶尔获得下面的sql,感觉很不错.   

例如下面的sql,这里使用了sum, 其中case那里如果是指定是减数则为正数,指定被减数的使用负数,然后再进行sum,那么就是+负数也就是相减,也就获取到指定两行的差值,非常有创意

SELECT stat_name,
          ROUND(sum(case
                when snap_id = &END_SNAP_ID then
                 VALUE
                else
                 -value
              end) / &ELAPSED_TIME,2) ps,
         ROUND( sum(case
                when snap_id = &END_SNAP_ID then
                 VALUE
                else
                 -value
              end) / &TRANS,2) pt
     FROM DBA_HIST_SYSSTAT
    WHERE SNAP_ID in (&BEGIN_SNAP_ID, &END_SNAP_ID)
      AND DBID = &DATABASE_ID
      AND INSTANCE_NUMBER = 2
      and stat_name in ('redo size',
                        'session logical reads',
                        'db block changes',
                        'physical reads',
                        'physical writes',
                        'user calls',
                        'parse count (total)',
                        'parse count (hard)',
                        'sorts (memory)',
                        'logons cumulative',
                        'execute count',
                        'user commits',
                        'user rollbacks')
    group by STAT_NAME order by stat_name;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值