Błąd mówi wszystko, nie grupujesz według MEMBERS.MEMBER_ID i 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
Chcesz liczyć osobiste sesje na członek, więc musisz pogrupować według informacji o członku.
Podstawowe (oczywiście może być dużo bardziej złożone) zapytanie GROUP BY, SELECT to:
SELECT <column 1>, <column n>
, <aggregate function 1>, <aggregate function n>
FROM <table_name>
GROUP BY <column 1>, <column n>
Funkcja agregująca jest, jak mówi Ken White, czymś w rodzaju MIN() , MAX() , COUNT() itp. GRUPUJ WEDŁUG wszystkich kolumny, które nie są agregowane.
Będzie to działać zgodnie z przeznaczeniem tylko wtedy, gdy Twoi MEMBERS tabela jest unikalna na MEMBER_ID , ale na podstawie Twojego zapytania podejrzewam, że tak. Aby wyjaśnić, co mam na myśli, jeśli Twoja tabela nie jest unikalna na MEMBER_ID wtedy nie liczysz liczby sesji na MEMBER_ID ale liczba sesji na MEMBER_ID i na MEMBER_NAME . Jeśli są w relacji 1:1, to właściwie to samo, ale jeśli możesz mieć wielu MEMBER_NAME s na MEMBER_ID to nie jest.