如何在不同的 y 上求 x 的和?

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

我有以下设置:

父表:

id父母 瓦尔
1 12

儿童桌:

idChild id父母 类型
1 1 1
2 1 1
3 1 2

我需要在

idParent
上加入这些桌子并在
type
上分组。

我有以下疑问

select c.type, sum(p.val) 
from parent as p 
join child as c on p.idParent = c.idParent
group by c.type

这给了我这个结果

类型 总和
1 24
2 12

第一行的

sum
是不需要的,因为我想要
val
的总和,但仅限于唯一的
idParent

预期输出:

类型 总和
1 12
2 12

以便

type = 1
组将检查相同
val
idParent
是否已包含在总和中。

这可能吗?

这里有一个 dbFiddle:

https://dbfiddle.uk/Y74_c1gP

https://dbfiddle.uk/VIXxf4sv(更多数据,以及子/类型关系的其他组合)

预期输出(有更多数据):

类型 总和
1 114
2 125

不确定这是否有帮助,这就是我在

C#
中解决问题的方法。

https://dotnetfiddle.net/zbzbil

注:

如果可能的话,我想保持 SQL 的“结构”不变,例如。没有 CTE,没有派生表,所以只有字段上的更改。

我尝试使用窗口函数,但这似乎是不可能的

group by

sql firebird
1个回答
0
投票

我认为使用子查询应该可行(如果我正确理解目标):

SELECT c.type, SUM(p.val) AS sum_val
FROM parent AS p
JOIN (
    SELECT DISTINCT idParent, type
    FROM child
) AS c ON p.idParent = c.idParent
GROUP BY c.type;
© www.soinside.com 2019 - 2024. All rights reserved.