L'erreur dit tout, vous ne regroupez pas par MEMBERS.MEMBER_ID
et 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
Vous voulez le nombre de sessions personnelles par membre, vous devez donc regrouper les informations sur le membre.
La requête de base (bien sûr, elle peut devenir beaucoup plus complexe) GROUP BY, SELECT est :
SELECT <column 1>, <column n>
, <aggregate function 1>, <aggregate function n>
FROM <table_name>
GROUP BY <column 1>, <column n>
Une fonction d'agrégat étant, comme le dit Ken White, quelque chose comme MIN()
, MAX()
, COUNT()
etc. Vous GROUP BY tous les colonnes qui ne sont pas agrégées.
Cela ne fonctionnera comme prévu que si vos MEMBERS
la table est unique sur MEMBER_ID
, mais d'après votre requête, je suppose que c'est le cas. Pour clarifier ce que je veux dire, si votre table n'est pas unique sur MEMBER_ID
alors vous ne comptez pas le nombre de sessions par MEMBER_ID
mais le nombre de sessions par MEMBER_ID
et par MEMBER_NAME
. S'ils sont dans une relation 1:1, c'est effectivement la même chose, mais si vous pouvez avoir plusieurs MEMBER_NAME
s par MEMBER_ID
alors ce n'est pas le cas.