Sum(column_name)和sum(column_name)之间的区别是什么(按id分区)

时间:2018-05-15 07:06:55

标签: sql sql-server window-functions

表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

然而,我得到了不同的结果,使用第一种方法,它丢弃了一些值。使用第二种方法时,它会按预期显示每条记录。请解释哪一个是正确的,并说明这两种方法的不同之处。

3 个答案:

答案 0 :(得分:1)

将第一个查询与 GROUP BY 一起使用应符合您的要求

        public string method1(int id)
    {
        var getAllStudents = rep.Students.Where(e => e.StudentId == id).ToList();
        foreach (var item in getAllStudents)
        {
            if (item.isActive != true)
                return "Error";

        }

        return "OK";

    }
    public string method2(int id)
    {
        var getAllTeachers = rep.Teachers.Where(e => e.TeacherId == id).ToList();
        foreach (var item in getAllTeachers)
        {
            if (item.isActive != true)
                return "Error";

        }

        return "OK";

    }
    public string method3(int id)
    {
        var getAllClasses = rep.Classes.Where(e => e.ClassId == id).ToList();
        foreach (var item in getAllClasses)
        {
            if (item.isActive != true)
                return "Error";

        }

        return "OK";

    }

检查this SQLFiddle以供参考

答案 1 :(得分:0)

试试这个:

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

由于您未使用group by,因此会添加所有值

**** **** DEMO

  

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

答案 2 :(得分:-1)

在第一个查询中,您应该按照以下条款编辑分组。

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

在所有查询列中使用聚合不在分组条款中使用。