SELECT «многие ко многим» по какой-то причине разделен на несколько строк - PullRequest
0 голосов
/ 09 декабря 2018

У меня есть две таблицы, соединенные через третью в отношениях «многие ко многим».Для упрощения:

Таблица A ID-A (int) Имя (varchar) Балл (числовой)

Таблица B ID-B (int) Имя (varchar)

ТаблицаAB ID-AB (int) A (внешний ключ ID-A) B (внешний ключ ID-B)

Мне нужно отобразить B-имя и сумму значений "Score" всехКак принадлежащий данному B. Однако следующий код:

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» с «счетом», разделенным на частично случайные приращения между этими строками.Например, если желаемый результат для Джонни равен 12, а для апреля - 25, запрос может отображать что-то вроде:

Johnny |7

Джонни |3

Джонни |2

Апрель |19

апрель |5

Апрель |1

и т. Д.

Даже после попытки вложения запроса и выполнения другого SELECT с помощью SUM («Оценка») результаты остаются такими же.Я не уверен, что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Хорошо, я разобрался в своей проблеме.На самом деле, я должен был только GROUP BY «Имя», но Firebird, как я думал, не позволил мне сделать это.Оказывается, это была просто опечатка.К сожалению.

0 голосов
/ 09 декабря 2018

Удалить Score из предложения GROUP BY:

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

Цель вашего запроса - суммировать по имени, поэтому одно имя должно появляться в предложении GROUP BY.Включив также счет, вы получите запись в выходных данных для каждой уникальной комбинации имя / оценка.

...