2014-02-27 5 views
0

가입하려고하면 문제가 생깁니다.
다음은 내 데이터베이스입니다.정확히 숫자를 추출 할 수 없습니다

rank (id, name) 
----------------- 
id | name 
1  CEO 
2  CTO 
3  Employee 
4  Manager 

user (id, position) 
----------------- 
id | position 
1   2 
2   2 
3   3 
4   3 

SQL> 내가

id | name  | count(*) 
1   CEO   1 
2   CTO   2 
3   Employee  2 
4   Manager  1 

같은 대답이 왜 CEO, Manager가 '1'로 간주되는이이 경우

SELECT rank.id, rank.name, count(*) 
     FROM rank 
     LEFT JOIN user 
     ON rank.id = user.position 
     GROUP BY rank.name 

?

'0'이어야한다고 생각합니다.

+0

_GROUP BY rank.name_ 대신 rank.id, rank.name_ 만 _GROUP BY가되어야합니다. –

답변

0

왼쪽 외부 조인은 당신에게 테이블 사용자의 일치가없는 때마다 빈 기록을 제공합니다, 그래서 당신은 0

다음

작업을 선택 성명 대신 다음 1의 수를 얻을 :

SELECT id, name, (select count(*) from user where user.position = rank.id) as cnt 
FROM rank; 

편집 : 그런데 NULL 값이 계산되지 않기 때문에 사용자 필드를 계산하면 명령문도 작동합니다. 따라서 COUNT (*) 대신 COUNT (user.position)를 사용합니다. 그러나 단순하고 가독성을 위해 내 진술을 선호합니다.

0

왼쪽 결합은 오른쪽 표와 일치하는지 여부에 관계없이 왼쪽 표의 모든 행을 제공합니다. 당신이 카운트 (*)를했기 때문에 빈 것도 카운트합니다. 대신에 카운트 (포지션)를 할 수 있습니다.

관련 문제