2013-03-07 2 views
3

두 테이블 login_activityevent_details이 있습니다. 테이블의 구조는 다음과 같습니다 :SQL 쿼리 가입 문제

Login_activity 
activity_id | student_id | login_date | event_id 

event_details 
event_id | event_name | event_date 

은 내가 event_id를 가져 오기 위해 필요 login_activity에서 student_id의 수는 event_id 일치하는.

나는 아래의 쿼리

select event_id,student_id 
from login_activity 
where login_activity.event_id in (select event_id from event_details); 

을 시도하지만 별개의 EVENT_ID을 얻고 사람들을 위해 student_ids의 셀 수없는입니다. 간단한 해결책이 있어야한다는 것을 알고 있지만 이해할 수 없습니다. 내가 뭘 놓치고 있니?

답변

4

당신은 당신이 특정 EVENT_NAME에 끌어하려는 경우가 아니면 당신은 실제로 event_details 테이블을 필요로하지 않는 GROUP BY를 사용하고

SELECT l.event_id, count(student_ID) 
FROM login_activity l 
INNER JOIN event_details e ON l.event_id = e.event_id 
GROUP BY l.event_id 

를 계산이 필요하거나 EVENT_DATE

SELECT l.event_id, count(student_ID) 
FROM login_activity l 
GROUP BY l.event_id 
+0

감사합니다. 나는 내가 무엇인가 놓치고있다라는 것을 알고 있었다 :) 그리고 그것은 그룹이었다! –

+0

완벽. 당신은 내 하루를 저장했습니다 :) – Cdeez

1

당신을 수행 결과에 대해 event_details 테이블이 필요합니다 (예 : 쿼리에서 이벤트의 이름이나 날짜를 사용해야합니까?). 그렇지 않다면, 당신은 단지 login_activity 테이블을 사용할 수 있습니다

select event_id, count(student_id) as student_count from login_activity group by event_id 

당신이 이벤트의 이름을하고자한다면, 그것은하지만, 여전히 많은 동일합니다.

위의 왼쪽 가입의 장점은 로그인 활동이없는 이벤트 (해당되는 경우)에 대한 결과를 얻을 수 있다는 것입니다. 그리고 event_name을 event_id 또는 날짜로 바꿀 수 있습니다.

+0

예 이벤트 정보가 필요합니다. 질문에 대해 간단하게했습니다. –

1

필요한 것을 얻기 위해 데이터를 결합하려면 내부 조인 또는 왼쪽 조인이 필요합니다. 그런 다음 그룹화 기준을 사용하고 이벤트 ID를 사용할 수 있습니다. 카운트를 얻으려면 카운트 명령을 사용할 수 있으며 count (l.student_id)와 같이 studentCount와 같은 새로운 필드로 할 수 있습니다.

2

WHERE 절 뒤에 'GROUP BY student_id'를 사용하고 싶다고 생각합니다.