【发布时间】:2021-07-24 13:24:02
【问题描述】:
select NVL((select name from supplier where id = t.id_supplier), 'All suppliers') as suppliers,
NVL((select name from stadium where id = m.id_stadium), 'All stadium') as stadium,
NVL((select name from league where id = m.id_league), 'All league') as league,
(NVL(sum(b.price), 0) + sum(t.cost)) as incomes
FROM match m
inner join ticket b on m.id = b.id_match
inner join stadion s on s.id = m.id_stadium
inner join league l on l.id = m.id_league
inner join transmission t on t.id = m.id_transmission
inner join supplier d on d.id = t.id_supplier
group by cube(d.id, s.id, l.id);
当我想将两个不同表格中的两个值相加时 - 比赛中售罄的门票和电视传输我得到的结果总和值太大。我发现单场比赛的传输成本太大了 X 倍,其中 X 是这场比赛的门票数量,只有当我加入门票表时。 我该如何修复它?
我在这里找到了类似问题的解决方案:SQL: After joining tables SUM() function returns wrong value 但它不适用于立方体。
例如,匹配 id 1 的 bilets 总和为 410.5:
select sum(b.price) from match m
inner join ticket b on m.id = b.id_match
where m.id = 1;
给出的结果 410.5 非常正确。 传输的总和是300 000:
select sum(t.cost) from match m
inner join transmission t on m.id_transmission = t.id
where m.id = 1;
它也返回正确的值。 但是当我添加一张票表时,我得到了 1200410,5 值什么是不正确的:
select sum(t.cost) + sum(b.price) from match m
inner join transmission t on m.id_transmission = t.id
inner join ticket b on b.id_match= m.id
where m.id = 1;
正确的值应该是 300410.5。
【问题讨论】:
-
我建议您提供示例数据和所需的结果。我怀疑
cube与关闭聚合无关。并且您可以简化查询以更好地说明问题。 -
@GordonLinoff 我添加了其他信息以发布。谢谢你的建议。
-
sum(t.cost) + sum(b.price) 将不起作用,因为两个求和查询都将返回不同的行,并且总和将被添加磨损。例如,成本查询有 3 行和价格查询有 5 行,那么成本查询将被添加 5 次而不是 3 次。