我有以下设置:
父表:
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/VIXxf4sv(更多数据,以及子/类型关系的其他组合)
预期输出(有更多数据):
类型 | 总和 |
---|---|
1 | 114 |
2 | 125 |
不确定这是否有帮助,这就是我在
C#
中解决问题的方法。
https://dotnetfiddle.net/zbzbil
注:
如果可能的话,我想保持 SQL 的“结构”不变,例如。没有 CTE,没有派生表,所以只有字段上的更改。
我尝试使用窗口函数,但这似乎是不可能的
group by
。
我认为使用子查询应该可行(如果我正确理解目标):
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;