sql >> Base de Datos >  >> RDS >> Oracle

No es un error de expresión GROUP BY

El error lo dice todo, no estás agrupando por MEMBERS.MEMBER_ID y 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

Quiere el recuento de sesiones personales por miembro, por lo que debe agrupar por la información del miembro.

La consulta básica (por supuesto, puede volverse mucho más compleja) GROUP BY, SELECT es:

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

Una función agregada es, como dice Ken White, algo así como MIN() , MAX() , COUNT() etc. AGRUPAS POR todos las columnas que no están agregadas.

Esto solo funcionará según lo previsto si sus MEMBERS la tabla es única en MEMBER_ID , pero según su consulta, sospecho que lo es. Para aclarar lo que quiero decir, si su tabla no es única en MEMBER_ID entonces no está contando la cantidad de sesiones por MEMBER_ID pero el número de sesiones por MEMBER_ID y por MEMBER_NAME . Si están en una relación 1:1, es efectivamente lo mismo, pero si puedes tener varios MEMBER_NAME s por MEMBER_ID entonces no lo es.