Felet säger allt, du grupperar inte efter MEMBERS.MEMBER_ID
och 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
Du vill ha antalet personliga sessioner per medlem, så du måste gruppera efter medlemsinformationen.
Den grundläggande (naturligtvis kan det bli mycket mer komplex) GROUP BY, SELECT-fråga är:
SELECT <column 1>, <column n>
, <aggregate function 1>, <aggregate function n>
FROM <table_name>
GROUP BY <column 1>, <column n>
En aggregerad funktion är, som Ken White säger, något som MIN()
, MAX()
, COUNT()
etc. Du GRUPPERAR EFTER alla kolumnerna som inte är aggregerade.
Detta fungerar bara som avsett om dina MEMBERS
tabellen är unik på MEMBER_ID
, men baserat på din fråga misstänker jag att det är det. För att förtydliga vad jag menar, om din tabell inte är unik på MEMBER_ID
då räknar du inte antalet sessioner per MEMBER_ID
men antalet sessioner per MEMBER_ID
och enligt MEMBER_NAME
. Om de är i ett 1:1-förhållande är det i praktiken samma sak men om du kan ha flera MEMBER_NAME
s per MEMBER_ID
då är det inte det.