首页 > 解决方案 > 根据另一个不同的列查找唯一值的总和

问题描述

我是甲骨文的新手。我在 Oracle Database 12c 版本上工作。一个文件有两个数据文件副本#。我只需要计算第二组文件#的备份数据文件副本的总大小,不包括第一个副本。

查询的输出显示一个文件的两个或多个副本#

如果我总结找到数据文件的总大小,它会显示两个数据文件副本的总和。

SQL> select sum((datafile_blocks)*8/1024) from v$BACKUP_DATAFILE;

SUM((DATAFILE_BLOCKS)*8/1024)
-----------------------------
                    10738.375

我只需要第一个副本或第二个副本的总大小

SQL> select file#,count(*),sum((datafile_blocks)*8/1024) from v$BACKUP_DATAFILE group by file#;

     FILE#   COUNT(*) SUM((DATAFILE_BLOCKS)*8/1024)
---------- ---------- -----------------------------
         1          2                          1900
         6          2                      3588.625
         2          2                         32.25
         5          2                          2500
         4          2                           670
         8          2                         87.25
         3          2                          1780
         7          2                         32.25
         9          2                       108.125
        10          2                            20
         0          4                        19.875

11 rows selected.

如果我用有子句分组,它显示 0 行

SQL> select sum((datafile_blocks)*8/1024) from v$BACKUP_DATAFILE group by file# having count(file#)=1;

no rows selected

标签: sqloracle

解决方案


如果我做对了,您只需要每个文件的最后一条语句。你?

在这种情况下,我建议这样:

with 
    t as (
        select file#, 
               datafile_blocks * 8 / 1024 sum_blk,
               checkpoint_time,
               row_number() over (
                         partition by file# 
                         order by checkpoint_time desc) desc_row_no 
          from  v$backup_datafile 
    )
select * 
  from t 
 where desc_row_no = 1

推荐阅读