El error lo dice todo, no estás agrupando por MEMBERS.MEMBER_ID
y 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
Quiere el recuento de sesiones personales por miembro, por lo que debe agrupar por la información del miembro.
La consulta básica (por supuesto, puede volverse mucho más compleja) GROUP BY, SELECT es:
SELECT <column 1>, <column n>
, <aggregate function 1>, <aggregate function n>
FROM <table_name>
GROUP BY <column 1>, <column n>
Una función agregada es, como dice Ken White, algo así como MIN()
, MAX()
, COUNT()
etc. AGRUPAS POR todos las columnas que no están agregadas.
Esto solo funcionará según lo previsto si sus MEMBERS
la tabla es única en MEMBER_ID
, pero según su consulta, sospecho que lo es. Para aclarar lo que quiero decir, si su tabla no es única en MEMBER_ID
entonces no está contando la cantidad de sesiones por MEMBER_ID
pero el número de sesiones por MEMBER_ID
y por MEMBER_NAME
. Si están en una relación 1:1, es efectivamente lo mismo, pero si puedes tener varios MEMBER_NAME
s por MEMBER_ID
entonces no lo es.