sql >> Databasteknik >  >> RDS >> Oracle

Inte ett GROUP BY-uttrycksfel

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.



  1. MySQL:Infoga post om den inte finns i tabellen

  2. Flyway på produktionsdatabas - Migration Checksum mismatch

  3. MySQL väljer max rekord i grupp av

  4. mysql om det inte finns