Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Não é um erro de expressão GROUP BY


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 é.