在多对多关系中,我有两个表通过第三个连接 . 为了简化:
表A ID-A(int)名称(varchar)分数(数字)
表B ID-B(int)名称(varchar)
表AB ID-AB(int)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,而4月的期望结果为25,则查询可能会显示如下内容:
约翰尼| 7
约翰尼| 3
约翰尼| 2
四月| 19
四月|五
四月| 1
等等
即使在尝试嵌套查询并使用SUM(“Score”)执行另一个SELECT之后,结果也是相同的 . 我不确定我做错了什么?
2 回答
好的,我弄明白了我的问题 . 实际上,我只有GROUP BY“Name”,但Firebird我认为不会让我这样做 . 事实证明这只是一个错字 . 哎呀 .
从
GROUP BY
子句中删除Score
:查询的目的是按名称进行汇总,因此单独的名称应出现在
GROUP BY
子句中 . 通过还包括分数,您将在输出中获得每个唯一名称/分数组合的记录 .