繁体   English   中英

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

[英]Oracle DB query to get records count and calculate average afterward

任何人都可以帮助我了解该 Oracle 查询。 这是我需要的输出。 在此处输入图片说明 感谢高级。从下面的查询返回一些记录我想计算平均值意味着 SUM(COST+DURATION)/No.of 行返回形式该查询但在查询下面基于 SITE_ID 做分区我不想要任何分区,想要的是什么查询返回(所有持续时间的总和+所有成本的总和/行返回数)但没有任何分区是我可以做到的任何方式

select * from (SELECT ROW_NUMBER() OVER (ORDER BY 1) RN,
SITE_ID,
CASEID,WOID,持续时间,
成本,
(SUM(COST+DURATION) OVER(PARTITION BY SITE_ID))/COUNT as TotalCost from

     (
      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

WHERE (1=1) ) 其中 rn 介于 0 和 1000 之间

根据您修改后的问题,我认为您想要的是每个站点的 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 
)
/

这里有一个 SQL Fiddle 演示来证明这个查询运行成功。


您的问题似乎引用了其他表、 siteemp ,我忽略了它们,因为您没有为它们提供连接条件。 同样,我忽略了 top-n 过滤器; 如果你愿意,你可以把它加回来。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM