Грешката казва всичко, не групирате по MEMBERS.MEMBER_ID
и MEMBERS.MEMBER_NAME
.
SELECT MEMBERS.MEMBER_ID, MEMBERS.MEMBER_NAME
, COUNT(personal_training_sessions.session_id)
FROM MEMBERS
JOIN personal_training_sessions
ON personal_training_sessions.member_id = members.member_id
GROUP BY MEMBERS.MEMBER_ID, MEMBERS.MEMBER_NAME
Искате броя на личните сесии на член, така че трябва да групирате по информация за члена.
Основната (разбира се, може да стане много по-сложна) заявка GROUP BY, SELECT е:
SELECT <column 1>, <column n>
, <aggregate function 1>, <aggregate function n>
FROM <table_name>
GROUP BY <column 1>, <column n>
Агрегирана функция е, както казва Кен Уайт, нещо като MIN()
, MAX()
, COUNT()
и т.н. Вие ГРУПИРАТЕ ПО всички колоните, които не са обобщени.
Това ще работи по предназначение само ако вашите MEMBERS
таблицата е уникална за MEMBER_ID
, но въз основа на вашето запитване подозирам, че е така. За да изясня какво имам предвид, ако вашата таблица не е уникална на MEMBER_ID
тогава не отчитате броя на сесиите на MEMBER_ID
но броя на сесиите на MEMBER_ID
и на MEMBER_NAME
. Ако те са във връзка 1:1, това е на практика едно и също нещо, но ако можете да имате няколко MEMBER_NAME
s на MEMBER_ID
тогава не е.