Грешката казва всичко, не групирате по 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 тогава не е.