2013-07-26 3 views
0

내 문제는 쉬운 해결책이있는 것 같지만 그것에 접근 할 수 없습니다. 두 테이블을 합치는 선택이 있습니다 : userslogin_log. 나는 각 사용자와 그가 가지고있는 로그인 수 (아직 로그인을하지 않은 사용자 포함)를 표시해야하므로 사용자 테이블에 right join을 수행합니다. 여기 PostgreSQL을 그룹과 오른쪽으로 가입하십시오.

은 내 선택 :

select users.id,count(*) 
from login_log 
right join users on login_log.user_id=users.id 
group by users.id 

문제는 있지만 login_log 테이블에 항목을 선택 쇼 1과 count(*)의 값을,이없는 사용자는 0 (또는 null)을해야되는 거지이다 ;

결과는 다음과 같습니다

user_id | count 
---------------- 
    73  4 
    59  2 
    47  1 
    3  1 
    61  1 
    67  1 (suppose to be 0) 
    14  1 (suppose to be 0) 
    46  1 (suppose to be 0) 

어떤 도움을 주시면 감사하겠습니다. 감사합니다.

답변

2

전체 행이 아닌 선택 항목 (즉, 테이블에 항목이 있거나 없을 수있는 항목)을 계산해야합니다. 예를 들어;

select users.id,count(login_log.user_id) 
from login_log 
right join users on login_log.user_id=users.id 
group by users.id 

그 이유는 쿼리가 사용자 당 적어도 하나의 행, 그래서 COUNT(*) 준다이다 - 행을 계산 - 항상 최소한 1

을 반환을