Sum(column_name) 和 sum(column_name) over (partition by id) 有啥区别

Posted

技术标签:

【中文标题】Sum(column_name) 和 sum(column_name) over (partition by id) 有啥区别【英文标题】:What is the difference between Sum(column_name) and sum(column_name) over (partition by id)Sum(column_name) 和 sum(column_name) over (partition by id) 有什么区别 【发布时间】: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 ' 它丢弃了一些值...' 这是一个简化的查询吗?您是否还在主查询中使用了联接? 【参考方案1】:

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

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

查看thisSQLFiddle 以供参考

【讨论】:

如果我使用这个查询,我会得到一个错误,将 a.total_amount 包含在 group by 中。当我使用 group by a.bpm_no, a.total_amount 时,虽然它给出了结果,但它再次丢弃了一些值。 它不应该给出错误请检查我在答案中添加的 SQLfiddle【参考方案2】:

试试这个:

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

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

****演示****

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

【讨论】:

这项工作是否可行,因为它给了我一个错误,还包括 a.total_amount 在组中,当我这样做时,结果丢弃了一些 bpm_no。 这应该可以。您不能在 group by 子句中包含 a.total_amount,因为您要聚合该列 我添加了一个带有一些随机数据的 sqlfiddle 链接。请检查这是否是您想要的输出。【参考方案3】:

在第一个查询中,您应该按如下方式编辑 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

在所有查询列中使用聚合,而不是在 Group By 子句中使用。

【讨论】:

以上是关于Sum(column_name) 和 sum(column_name) over (partition by id) 有啥区别的主要内容,如果未能解决你的问题,请参考以下文章

31.SUM() 函数

SQL SUM() 函数

SQL SUM() 函数

Mysql经常使用函数汇总

数据库中Count是啥意思和SUM有啥区别

sql语句中having的作用是?