Oracle
 sql >> Base de données >  >> RDS >> Oracle

Pas une erreur d'expression GROUP BY

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.