首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在SUM函数中使用select语句

如何在SUM函数中使用select语句
EN

Stack Overflow用户
提问于 2017-05-07 09:04:01
回答 4查看 7.7K关注 0票数 1

我有张像这样的桌子。

代码语言:javascript
复制
ID      |    Block     |    Flats  |    Ammount  |    Balance  |
1       |      1       |      GF-1 |    1000     |      500    |
2       |      1       |      GF-2 |    1000     |      500    |
3       |      2       |      GF-1 |    1000     |      500    |
4       |      2       |      GF-2 |    1000     |      1000   |
5       |      2       |      GF-2 |    1000     |      0      |

我想对此执行sum查询。我试过了

代码语言:javascript
复制
Select distinct A.Block,(Select Sum(Ammount) from t1 where block = A.block),(select Sum(Balance) from t1 where block = A.block) from t1 A

这个查询很好,但是它的求和余额是2500,但是由于ID4和5是相同的,所以我希望它能把最新的余额之和,也就是1500。我尝试将select语句放入sum函数中,但这是行不通的。那我怎么能做到这一点呢?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2017-05-07 11:41:18

您可以首先为每个block/flats组合选择最新的flats(使用row_number()),然后聚合:

代码语言:javascript
复制
Select t1.Block, sum(amount)
from (select t1.*,
             row_number() over (partition by block, flats order by id desc) as seqnum
      from t1
     ) t1
where seqnum = 1
group by t1.Block;
票数 2
EN

Stack Overflow用户

发布于 2017-05-07 09:16:08

我想你只是想让SUM() group by block喜欢

代码语言:javascript
复制
select Block, sum(amount) totalamount,
sum(case when balance <> 0 then balance end) totalbalance
from t1
group by Block;
票数 1
EN

Stack Overflow用户

发布于 2017-05-07 09:18:49

您可以使用下面的查询

代码语言:javascript
复制
Select A.Block, Sum(A.Ammount), Sum(A.Balance)
from t1 A group by A.Flats order by A.ID;

Order子句用于对ID进行排序

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43829698

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档