Oracle
 sql >> Database >  >> RDS >> Oracle

Non un errore di espressione GROUP BY

L'errore dice tutto, non stai raggruppando per 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

Vuoi il conteggio delle sessioni personali per membro, quindi è necessario raggruppare in base alle informazioni sul membro.

La query di base (ovviamente può diventare molto più complessa) GROUP BY, SELECT è:

SELECT <column 1>, <column n>
     , <aggregate function 1>, <aggregate function n>
  FROM <table_name>
 GROUP BY <column 1>, <column n>

Una funzione aggregata è, come dice Ken White, qualcosa come MIN() , MAX() , COUNT() ecc. GRUPPI PER tutti le colonne non aggregate.

Funzionerà come previsto solo se i tuoi MEMBERS la tabella è univoca su MEMBER_ID , ma in base alla tua domanda sospetto che lo sia. Per chiarire cosa intendo, se la tua tabella non è univoca su MEMBER_ID allora non stai contando il numero di sessioni per MEMBER_ID ma il numero di sessioni per MEMBER_ID e per MEMBER_NAME . Se hanno una relazione 1:1, è effettivamente la stessa cosa, ma se puoi avere più MEMBER_NAME s per MEMBER_ID allora non lo è.