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.