Sum(column_name) 和 sum(column_name) over (按 id 划分)有什么区别



有表a,有两列bpm_no和total_amount。我正在尝试总结每个bpm_no的total_amount,其中bpm_no可以重复,并且不同行的total_amount列可能不同。我正在使用两种方法,一种方法如下所示:

select 
a.bpm_no,
sum(a.total_amount)
from table a
group by a.bpm_no, a.total_amount

我正在按方法使用分区的另一种方法,如下所示:

select
a.bpm_no,
sum(a.total_amount) over (partition by a.bpm_no)
from table a
group by a.bpm_no,a.total_amount

但是,我得到了不同的结果,使用第一种方法,它丢弃了一些值。使用第二种方法时,它会按预期显示每条记录。请解释哪一种是正确的,以及这两种方法有什么区别。

将第一个查询与GROUP BY一起使用应该可以满足您的要求

select a.bpm_no,
sum(a.total_amount)
from table a
GROUP BY a.bpm_no;

检查此 SQLFiddle 以供参考

试试这个:

SELECT 
a.bpm_no,
SUM(a.total_amount)
FROM 
table a
GROUP BY 
a.bpm_no

由于您没有使用group by,它添加了所有值

****演示****

http://sqlfiddle.com/#!18/bb29b/2

在第一个查询中,您应该按如下方式编辑 Group By 子句。

select 
a.bpm_no,
sum(a.total_amount)
from table a
group by a.bpm_no

在第二种情况下,结果如下。

select
a.bpm_no,
sum(a.total_amount) over (partition by a.bpm_no)
from table a
group by a.bpm_no

在"所有查询"列中,使用"聚合"而不是"分组依据"子句。

最新更新