Oracle DB查询以获取记录计数并在之后计算平均值

时间:2018-02-15 06:57:25

标签: oracle

有人可以帮我解决这个Oracle查询。 这是我要求的输出。 enter image description here 谢谢在advanced.from下面查询返回一些我想要计算的记录 平均值表示SUM(COST + DURATION)/ No.of返回表单查询但是在查询下执行基于SITE_ID的分区我不想要任何分区,什么是想要的是什么查询返回(所有持续时间的总和+所有成本的总和/否。行返回)但没有任何分区是我能做到的任何方式

选择*来自(   SELECT ROW_NUMBER()OVER(ORDER BY 1)RN,
          SITE_ID,
          案例ID,           WOID,           期限,
          成本
          (SUM(COST + DURATION)超过(SITE_ID分区))/ COUNT为TotalCost来自

     (
      SELECT  COUNT(*) OVER () as COUNT,
      SITE_ID,  
      CASEID,
      WOID,
      ROUND(table1.duration/3600,2) AS DURATION,
      ROUND(table2.duration/3600),2) AS COST
       FROM table1  ) AVG

在哪里(1 = 1)    ) 其中rn介于0和1000之间

1 个答案:

答案 0 :(得分:0)

根据您修改过的问题,我认为您想要的是每个网站的COST和DURATION的总和,以及这些数据的平均值来自table1table2中的条目数。这就是这个查询的作用:

select site_id
       , duration
       , cost
       , (duration+cost)/no_of as avg_total_cost
from (
    select
      table1.site_id
      , count(*) as no_of
      , sum(round(table1.duration/3600,2)) as duration
      , sum(round((table1.labor_rate * table2.duration)/3600,2)) as cost
    from table1
    inner join table2
        on table1.id = table2.id
    group by table1.site_id 
)
/

以下a SQL Fiddle demo证明此查询成功运行。

您的问题似乎引用了其他表格siteemp,我忽略了这些表格,因为您没有为它们提供加入条件。同样,我忽略了前n个过滤器;如果你愿意,你可以把它添加回来。