Oracle
 sql >> Datenbank >  >> RDS >> Oracle

Kein GROUP BY-Ausdrucksfehler

Der Fehler sagt alles, Sie gruppieren nicht nach MEMBERS.MEMBER_ID und 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

Sie möchten die Anzahl der persönlichen Sitzungen pro Mitglied, also müssen Sie nach den Mitgliedsinformationen gruppieren.

Die grundlegende (natürlich kann sie viel komplexer werden) GROUP BY, SELECT-Abfrage lautet:

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

Eine Aggregatfunktion, die, wie Ken White sagt, so etwas wie MIN() ist , MAX() , COUNT() usw. Sie GRUPPIEREN NACH alle die nicht aggregierten Spalten.

Dies funktioniert nur wie beabsichtigt, wenn Ihre MEMBERS Tabelle ist eindeutig auf MEMBER_ID , aber basierend auf Ihrer Anfrage vermute ich, dass es so ist. Um zu verdeutlichen, was ich meine, wenn Ihre Tabelle auf MEMBER_ID nicht eindeutig ist dann zählen Sie nicht die Anzahl der Sitzungen pro MEMBER_ID sondern die Anzahl der Sitzungen pro MEMBER_ID und pro MEMBER_NAME . Wenn sie in einer 1:1-Beziehung stehen, ist es praktisch dasselbe, aber wenn Sie mehrere MEMBER_NAME haben können s pro MEMBER_ID dann ist es nicht.