Эффективное включение столбца, не входящего в группу SQL-запроса

Учитывая

Таблица А

Id   INTEGER
Name VARCHAR(50)

Таблица Б

Id   INTEGER
FkId INTEGER  ; Foreign key to Table A

Я хочу подсчитать количество вхождений каждого FkIdзначения:

SELECT FkId, COUNT(FkId) 
FROM B 
GROUP BY FkId

Теперь я просто хочу также вывести имя из Table A.

Это не сработает:

SELECT FkId, COUNT(FkId), a.Name
FROM B b
INNER JOIN A a ON a.Id=b.FkId
GROUP BY FkId

поскольку a.Nameне содержится в пункте GROUP BY, (приводит к ошибке is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause).

Суть в том, чтобы перейти от вывода вот так

FkId  Count
1      42
2      25

выводить вот так

FkId  Count  Name
1      42     Ronald
2      22     John

В SO есть довольно много совпадений для этого сообщения об ошибке, но некоторые, например.https://stackoverflow.com/a/6456944/141172есть комментарии типа "сгенерирует 3 скана таблицы, а не 1, поэтому не будет масштабироваться".

Как я могу эффективно включить поле из объединенногоTable B(отношение 1 :1 кFkId)в выводе запроса?

9
задан Community 23 May 2017 в 12:10
поделиться