【发布时间】:2018-12-09 07:56:40
【问题描述】:
我有两个表通过第三个以多对多关系连接。为了简化:
表 A ID-A(整数) 名称(varchar) 分数(数字)
表 B ID-B(整数) 名称(varchar)
表 AB ID-AB(整数) A(外键ID-A) B(外键ID-B)
我想要的是显示属于给定 B 的所有 As 的 B-Name 和“Score”值的总和。但是,以下代码:
WITH "Data" AS(
SELECT "B."."Name" As "BName", "A"."Name", "Score"
FROM "AB"
LEFT OUTER JOIN "A" ON "AB"."A" = "A"."ID-A"
LEFT OUTER JOIN "B" ON "AB"."B" = "B"."ID-B")
SELECT "BName", SUM("Score") AS "Total"
FROM "Data"
GROUP BY "Name", "Score"
ORDER BY "Total" DESC
结果会为每个“BName”显示几行,其中“分数”在这些行之间划分为几乎随机的增量。例如,如果 Johnny 的期望结果是 12,而 April 的期望结果是 25,则查询可能会显示如下内容:
约翰尼 | 7
约翰尼 | 3
约翰尼 | 2
四月 | 19
四月 | 5
四月 | 1
等等
即使在尝试嵌套查询并使用 SUM("Score") 执行另一个 SELECT 之后,结果也是一样的。我不确定我做错了什么?
【问题讨论】:
-
A minimal reproducible example 包括 DBMS(带版本)、清晰的规范、剪切和粘贴和可运行代码(具有小的代表性输入)(将表初始化格式化为表)和可区分(因此排序)所需的输出.但是调试的绝对基础说:表明你的程序在通过(子)表达式时做了你期望的事情,说明它是什么,并表明它实际上是通过增量输出做到的。在添加您无法修复的问题代码时,请研究(手册和网络)。重复,尽量减少工作代码和错误代码。然后询问工作示例和非工作示例之间的(小)差异。
标签: join select many-to-many firebird