首页 文章

由于某种原因,多对多SELECT被分成多行

提问于
浏览
0

在多对多关系中,我有两个表通过第三个连接 . 为了简化:

表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 回答

  • 0

    好的,我弄明白了我的问题 . 实际上,我只有GROUP BY“Name”,但Firebird我认为不会让我这样做 . 事实证明这只是一个错字 . 哎呀 .

  • 1

    GROUP BY 子句中删除 Score

    SELECT BName, SUM(Score) AS Total
    FROM Data
    GROUP BY BName
    ORDER BY Total DESC;
    

    查询的目的是按名称进行汇总,因此单独的名称应出现在 GROUP BY 子句中 . 通过还包括分数,您将在输出中获得每个唯一名称/分数组合的记录 .

相关问题