【发布时间】:2018-05-15 07:06:54
【问题描述】:
表 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
但是,我得到了不同的结果,使用第一种方法,它丢弃了一些值。使用第二种方法时,它会按预期显示每条记录。请解释哪一个是正确的,以及这两种方法的区别是什么。
【问题讨论】:
-
第一次查询会报错。
-
在那种情况下我怀疑你使用的是 sql-server
-
sql-server 将在第一种情况下抛出错误,因为您缺少
group by子句。如果添加它,则第一个查询是正确的。它不会“丢弃”行,而是聚合它们。 -
第一个查询将导致“列 'a.bpm_no' 在选择列表中无效,因为它既不包含在聚合函数中,也不包含在 GROUP BY 子句中”如果你真的在使用 SQL Server
-
' 它丢弃了一些值...' 这是一个简化的查询吗?您是否还在主查询中使用了联接?
标签: sql sql-server window-functions