2014-04-08 48 views
2

您能告訴我如何減去值?如何使用SQL減去值

SQL>

select SUM(bytes/1024/1024) from dba_data_files where TABLESPACE_NAME='UNDOTBS1' 

2;

SUM(BYTES/1024/1024) 
-------------------- 
      7000 

SQL>

select SUM(BYTES/1024/1024) from DBA_UNDO_EXTENTS where STATUS LIKE 'ACTIVE'; 

SUM(BYTES/1024/1024) 
-------------------- 
       8 

我需要得到一個值7000 - 8

當我做

select SUM(bytes/1024/1024) from dba_data_files where TABLESPACE_NAME='UNDOTBS1' 
minus 
select SUM(BYTES/1024/1024) from DBA_UNDO_EXTENTS where STATUS='ACTIVE'; 

我只能從第一選擇得到的結果。

+0

'minus'不是算術運算符,這是一個關係運算符。 –

回答

1

可能的工作:

SELECT sum_a-sum_b as result 
FROM 
    (SELECT SUM(bytes/1024/1024) as sum_a from dba_data_files where TABLESPACE_NAME='UNDOTBS1') as a, 
    (select SUM(BYTES/1024/1024) as sum_b from DBA_UNDO_EXTENTS where STATUS LIKE 'ACTIVE') as b 
5

這裏使用雙假表,並評估金額爲標量:

SELECT 
    (SELECT SUM(bytes/1024/1024) as sum_a 
    from dba_data_files where TABLESPACE_NAME='UNDOTBS1') 
- (select SUM(BYTES/1024/1024) as sum_b 
    from DBA_UNDO_EXTENTS where STATUS LIKE 'ACTIVE') as Difference 
FROM 
    dual; 
0

SELECT ... 
minus 
SELECT... 

的語法使用一組數學方法。它從集合[7000]中減去集合[8],留下集合[7000]。其他答案給了你解決這個問題並獲得你想要的信息的選項。

0

做的另一種方式:

select (SUM(u.bytes) - SUM(a.BYTES)) /1024/1024 
from dba_data_files u 
    cross join DBA_UNDO_EXTENTS a 
where u.TABLESPACE_NAME='UNDOTBS1' 
    and a.STATUS='ACTIVE';