SQL-最大ID的总和

问题描述 投票:0回答:1

我有这样的桌子,

| id | name | subtask | maintask |
|----|------|---------|----------|
| 1  | t1   | 11      | 20       |
| 1  | t1   | 12      | 20       |
| 1  | t1   | 1       | 30       |
| 2  | t1   | 2       | 20       |
| 2  | t1   | 2       | 20       |

我想准备这样的结果

| id | name | sum_of_subtask | sum_of_maintask | diff |
|----|------|----------------|-----------------|------|
| 2  | t1   | 4              | 40              | 36   |

需要选择最大ID,然后对子任务和主任务进行求和,然后最后一列是sum(子任务)与sum(主任务)的差

我在下面的查询中尝试了此方法,但是它计算所有列的总和。

select max(id), name, sum(subtask),sum(maintask),sum(subtask-maintask) from tbl
group by name
sql postgresql window-functions
1个回答
0
投票

您只想要一行吗?如果是这样,请使用order bylimit

select id, name, sum(subtask), sum(maintask), sum(subtask-maintask)
from tbl
group by id, name
order by id desc
limit 1;

如果数据很大,则过滤[[之前聚合可能会更有效:

select id, name, sum(subtask), sum(maintask), sum(subtask-maintask) from tbl where id = (select max(id) from tbl) group by id, name;
如果要每个id的最大name,则过滤逻辑为:

select id, name, sum(subtask), sum(maintask), sum(subtask-maintask) from tbl t where t.id = (select max(t2.id) from tbl t2 where t2.name = t.name) group by id, name;


0
投票
请使用以下查询,

select id, name, sum(subtask), sum (maintask), sum(subtask)-sum (maintask) where id in (select max(id) from table) group by id, name;


0
投票
select id, name, sum(subtask), sum(maintask), sum(subtask-maintask) from tbl where id = (select max(id) from tbl) group by id, name
© www.soinside.com 2019 - 2024. All rights reserved.