O erro diz tudo, você não está agrupando por
MEMBERS.MEMBER_ID
e 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
Você quer a contagem de sessões pessoais por membro, então você precisa agrupar pelas informações do membro.
A consulta básica (é claro que pode ficar muito mais complexa) GROUP BY, SELECT é:
SELECT <column 1>, <column n>
, <aggregate function 1>, <aggregate function n>
FROM <table_name>
GROUP BY <column 1>, <column n>
Uma função agregada sendo, como Ken White diz, algo como
MIN()
, MAX()
, COUNT()
etc. Você AGRUPA POR todos as colunas que não são agregadas. Isso só funcionará como pretendido se seus
MEMBERS
a tabela é única em MEMBER_ID
, mas com base em sua consulta, suspeito que seja. Para esclarecer o que quero dizer, se sua tabela não for exclusiva em MEMBER_ID
então você não está contando o número de sessões por MEMBER_ID
mas o número de sessões por MEMBER_ID
e por MEMBER_NAME
. Se eles estiverem em um relacionamento 1:1, então é a mesma coisa, mas se você puder ter vários MEMBER_NAME
s por MEMBER_ID
então não é.