2017-02-22 1 views
0

event_participants 테이블에서 참가자 수를 어떻게 계산합니까? 이것은 내 테이블왼쪽 조인 쿼리에서 어떻게 계산합니까?

event_place 

id | name  
1 | New York 
2 | Canada 


event_participants 

id | event_place_id | name 
1 | 1    | Jon 
2 | 1    | Mike 
3 | 2    | Van 

만 내 쿼리

SELECT count(*) as count 
FROM event_participants as t1 
LEFT JOIN event_place as t2 
ON t1.event_place_id = t2.id; 

에 잘못된 결과를 얻고 그 결과는 3

내가이

New York | 2 
Canada | 1 
같은 결과를 얻는해야한다입니다
+0

연구 –

+0

에 의해 그룹 당신은'GROUP BY' [링크]를 사용할 수 있습니다 (https://www.w3schools.com/sql/sql_groupby.asp) –

답변

0

같은 검색어.

select pl.id,pl.name,count(*) from 
event_place pl 
left join event_participants ep 
on pl.id = ep.event_place_id 
group by pl.id; 
0

모든 레코드를 세고 있기 때문에 올바른 결과가 나옵니다. 당신이, 당신이해야 GROUP BY 이벤트 장소 이벤트 장소마다 카운트를 원하는 경우

SELECT t1.event_place_id, t2.name, count(*) as count 
FROM event_participants as t1 
LEFT JOIN event_place as t2 
ON t1.event_place_id = t2.id 
GROUP BY t1.event_place_id, t2.name,; 
+0

0 결과를 표시하는 방법 –

0
select a.name, count(1) from event_place a, event_participants b 
where b.event_place_id = a.id 
group by a.name; 
+1

이 코드 단편은 환영하며 도움을 줄 수도 있지만 [포함 된 경우 크게 개선 될 것입니다. 설명] (// meta.stackexchange.com/q/114762) * how * 및 * why *이 문제를 해결합니다. 지금 묻는 사람뿐만 아니라 앞으로 독자에게 질문에 답하고 있다는 것을 기억하십시오! 설명을 추가하려면 답을 편집하고 어떤 제한 및 가정이 적용되는지 표시하십시오. –

0

는 문제의 몇이있을 나타납니다.

나는 모든 짝수 장소의 목록과 각 사람의 수를 원한다고 가정합니다. 그렇다면 LEFT OUTER는 event_participants 테이블을 다른 방법이 아닌 event_place 테이블에 조인해야 함을 나타냅니다. 이렇게하면 참여자가없는 장소를 나열 할 수 있습니다.

또한 GROUP BY 절이 필요합니다.

COUNT (*)를 사용하는 경우 그룹화 이전에 반환 된 행을 계산합니다. 그러나 일치하는 참가자가없는 경우 행이 여전히 장소에 대해 반환되므로 카운트로 1을 얻습니다. 이를 피하려면 참여자 테이블에있는 COUNT()의 열을 지정하십시오. 열 이름으로 COUNT하기 때문에 어떤 참가자 경우는 그 자리에 0을 반환합니다 해당 열의 비 NULL 값의 수를 계산 : -

SELECT t2.name, 
    COUNT(t1.id) AS count 
FROM event_place t2 
LEFT JOIN event_participants t1 
ON t1.event_place_id = t2.id 
GROUP BY t2.name 
관련 문제