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.