sql-aggregate函数和group-by

jjhzyzn0  于 2021-07-24  发布在  Java
关注(0)|答案(3)|浏览(357)

我的视图:

JobId,
ClientName,
ClientAddress,
Cost

myview中的示例数据:

1, John, 23 road, 25
1, John, 23 road, 20
1, John, 23 road, 5
2, James, 6 road, 10
2, James, 6 road, 4

我要计算每个jobid的成本总和,还要返回clientname、clientaddress等。。这个视图很大,而且必须对clientname、clientaddress进行分组,这需要很长时间才能运行。
处理这个问题最好的方法是什么?
我目前的问题是:

SELECT ClientName,
ClientAddress,
SUM(Cost) as TotalCost
FROM MyView
GROUP BY JobId, ClientName, ClientAddress, TotalCost

我追求的结果:

John, 23 road, 50 
James, 6 road, 14
sr4lhrrt

sr4lhrrt1#

如果每个jobid的clientname和clientaddress总是相同的,那么这个(尽管很笨拙)就可以工作了:

SELECT MIN(ClientName), MIN(ClientAddress), SUM(Cost) AS TotalCost
  FROM MyView
 GROUP BY JobId

在这种假设下,您真正想要分组的是jobid,因为其他所有内容要么是不变的,要么是聚合目标。

kiayqfof

kiayqfof2#

如果要计算每行的总数,可以使用窗口函数:

select v.*, sum(cost) over (partition by jobid)
from myview v;
pobjuy32

pobjuy323#

如果每个工作id的名称和地址都相同,我认为这应该有效,您不应该在中使用totalcost group by ```
SELECT ClientName,
ClientAddress,
SUM(Cost) as TotalCost
FROM MyView
GROUP BY ClientName, ClientAddress

相关问题