2012-12-19 5 views
4

저는 비교적 데이터베이스에 익숙하지 않습니다. Oracle을 사용하고 있으며이 쿼리를 구현하여 회원이 보유한 개인 교육 세션 수를 찾습니다.GROUP BY 표현식 오류가 아닙니다.

표는 다음과 같습니다.

회원들

MEMBERS_ID(NUMBER), 
MEMBERSHIP_TYPE_CODE(VARCHAR), 
ADDRESS_ID(NUMBER), CLUB_ID(NUMBER) 
MEMBER_NAME(VARCHAR), 
MEMBER_PHONE(VARCHAR), 
MEMBER_EMAIL(VARCHAR) 

PERSONAL_TRAINING_SESSIONS

SESSION_ID(VARHCAR), 
MEMBER_ID (NUMBER), 
STAFF_ID(VARCHAR), 
SESSION_DATETIME(DATE) 

내 쿼리는이 오류 returing된다

ORA-00979: not a GROUP BY expression 00979. 00000 - "not a GROUP BY expression" *Cause:
*Action: Error at Line: 1 Column: 8

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 personal_training_sessions.session_id; 

누구나 올바른 방향으로 나를 가리킬 수 있습니까? 내 주변을 둘러 보았습니다. 카운트 쿼리를 분리해야합니까?

+1

자습서를 거쳐 가능한 일부를 선택하여 게임을하는 것이 좋습니다. – Ben

답변

6

오류가 모두 표시되면 그룹화하지 않은 것입니다 (MEMBERS.MEMBER_IDMEMBERS.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 

당신은 개인 세션 회원 당 의 수를 원하는, 그래서 당신은 회원 정보에 의해 그룹이 필요합니다.

기본 (물론 더 복잡한 많이 얻을 수 있습니다) GROUP BY, SELECT 쿼리는 다음과 같습니다

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

집계 함수의 존재는, 켄 화이트가 말한대로, MIN(), MAX(), COUNT() 등과 같은 당신 GROUP BY 모두 집계되지 않은 열.

MEMBERS 테이블이 MEMBER_ID에서 유일한 경우에만 작동합니다. 그러나 귀하의 질문에 따라 나는 그것이 의심 스럽습니다. 제 말의 의미를 명확히하기 위해 테이블이 MEMBER_ID에 유일하지 않은 경우 MEMBER_ID 당 세션 수를 계산하지 않고 MEMBER_IDMEMBER_NAME 당 세션 수를 계산합니다. 1 : 1 관계에있는 경우 실제로는 똑같습니다./MEMBER_ID 당 여러 개일 수 있습니다. 당신은 COUNT 함수, 따라서 다른 열, MEMBER_ID & MEMBER_NAME을 사용하는

+2

+1. 명확히하기 위해,'GROUP BY'는 집계되지 않은 (SUM(), AVG(), MIN(), MAX(), 또는 다른 집계 함수). –

+0

나는 그저 @KenWhite :-)와 같은 작은 것을 추가했다. – Ben

+0

나는 그것을 볼 수 있지만 분명히 설명하고 있는지는 잘 모르겠다. SQL에 익숙하지 않은 누군가는 ', '은 '집계되지 않은 모든 열'을 의미한다는 것을 알지 못할 수도 있습니다. –

1
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 personal_training_sessions.session_id; 

, GROUP BY 절에 포함되어야합니다.