Jas*_*son 9 sql group-by sum function
我需要一些关于SUM功能的帮助.我试图将同一帐户的帐单金额合并为一个总计,但我得到的结果显示我的SUM列只是将我的第一列乘以3.
这是我想要的模拟数据的结果:
AccountNumber Bill BillDate
1 100.00 1/1/2013
1 150.00 2/1/2013
1 200.00 3/1/2013
2 75.00 1/1/2013
2 100.00 2/1/2013
Run Code Online (Sandbox Code Playgroud)
查询:
SELECT AccountNumber, Bill, BillDate, SUM(Bill)
FROM Table1
GROUP BY AccountNumber, Bill, BillDate
AccountNumber Bill BillDate SUM(Bill)
1 100.00 1/1/2013 450.00
1 150.00 2/1/2013 450.00
1 200.00 3/1/2013 450.00
2 75.00 1/1/2013 175.00
2 100.00 2/1/2013 175.00
Run Code Online (Sandbox Code Playgroud)
要么
AccountNumber Bill SUM(Bill)
1 100.00 450.00
2 75.00 175.00
Run Code Online (Sandbox Code Playgroud)
如果可能的话,我希望得到两个结果.
这是我得到的:
我的SUM列只是乘以3,它实际上并不是基于帐号来汇总数据.
AccountNumber Bill BillDate SUM(Bill)
1 100.00 1/1/2013 300.00
1 150.00 2/1/2013 450.00
1 200.00 3/1/2013 600.00
2 75.00 1/1/2013 225.00
2 100.00 2/1/2013 300.00
Run Code Online (Sandbox Code Playgroud)
a_h*_*ame 12
如果您不想对结果进行分组,请使用窗口功能.
您没有说明您的DBMS,但这是ANSI SQL:
SELECT AccountNumber,
Bill,
BillDate,
SUM(Bill) over (partition by accountNumber) as account_total
FROM Table1
order by AccountNumber, BillDate;
Run Code Online (Sandbox Code Playgroud)
这是一个SQLFiddle:http://sqlfiddle.com/#!15/2c35e/1
您甚至可以添加以下内容:
sum(bill) over (partition by account_number order by bill_date) as sum_to_date
Run Code Online (Sandbox Code Playgroud)
这将为您提供截至当前行日期的总计.
您BillDate
正在进行分组,但每个帐户的帐单日期都不同,因此您的行不会被分组.如果你考虑一下,这甚至没有意义 - 它们是不同的账单,并且有不同的日期.同样适用于Bill
- 您试图为帐户汇总账单,为什么要按此分组?
如果您离开BillDate
和Bill
离开select和group by子句,您将获得正确的结果.
SELECT AccountNumber, SUM(Bill)
FROM Table1
GROUP BY AccountNumber
Run Code Online (Sandbox Code Playgroud)
谢谢你的回复。事实证明我的问题是重复条目的数据库问题,而不是我的逻辑问题。快速表同步修复了该问题,并且 SUM 功能按预期工作。这些对于 SUM 功能来说仍然是有用的知识,如果您在使用它时遇到困难,那么值得阅读。
归档时间: |
|
查看次数: |
88948 次 |
最近记录: |