Я пытаюсь понять, как правильно использовать JOIN
, COUNT(*)
и GROUP BY
для выполнения довольно простого запроса. На самом деле я заставил его работать (см. ниже), но из того, что я прочитал, я использую дополнительный GROUP BY
, которого не должен был.
(Примечание: приведенная ниже проблема не является моей реальной проблемой (которая связана с более сложными таблицами), но я попытался придумать аналогичную проблему)
У меня есть две таблицы:
Table: Person
-------------
key name cityKey
1 Alice 1
2 Bob 2
3 Charles 2
4 David 1
Table: City
-------------
key name
1 Albany
2 Berkeley
3 Chico
Я хотел бы сделать запрос о людях (с некоторым предложением WHERE
), который возвращает
- количество подходящих людей в каждом городе
- ключ от города
- название города.
If I do
SELECT COUNT(Person.key) AS count, City.key AS cityKey, City.name AS cityName
FROM Person
LEFT JOIN City ON Person.cityKey = City.key
GROUP BY Person.cityKey, City.name
Я получаю желаемый результат
count cityKey cityName
2 1 Albany
2 2 Berkeley
Однако я прочитал, что добавление этой последней части пункта GROUP BY
(City.name
) только для того, чтобы заставить его работать, неправильно.
Так как же правильно это сделать? Я пытался найти ответ в Google, но чувствую, что есть что-то фундаментальное, чего я просто не понимаю.