2014-11-09 6 views
0

나는 server_id과 관련된 정보를 저장 한 MySQL 테이블을 가지고 있습니다.MySQL 그룹 By & WHERE 절

SELECT server_id,COUNT(*) as online_clients 
FROM `user_activity` 
WHERE ISNULL(`date_end`) 
GROUP BY `server_id`; 

나는 독특한 server_id의 모든 행과 각각에 대한 online_clients를 반환 할 것으로 예상되는 :

나는 다음과 같은 쿼리를 가지고있다.

그러나 WHERE 절을 제거하면 모든 서버 ID **와 온라인 클라이언트을 각각 얻습니다.

WHERE 절이 작동하지 않는 이유는 무엇입니까? 이 예에서 online_clients와 함께 모든 server_ids를 다시 가져 오지 않아야합니까? (date_end에 null이 없으므로).

당신에게

+0

당신이 SERVER_ID에 의해 그룹'으로 시도 할 수 있습니다를 date_end를 가지는 것은 NULL 절'입니다. –

+0

where 절이 작동하지 않습니다. 그것은 date_end가 알려지지 않은 컬럼을 가지고 있다고 말합니다. – OhGodWhy

+0

을 select 문, 즉 date_end의 일부로 만듭니다. –

답변

0

Q 감사합니다 이유와에게 WHERE 절을 작동하지 않습니다? 이 예제에서 online_clients 마녀와 함께 모든 server_ids를 다시 가져올 필요가 없습니다 (0)?

A : WHERE 절의 조건부가 NULL 값을 가진 행이 date_end 열에없는 경우 쿼리가 행을 반환하지 않습니다. 그리고 우리는 어떤 행이 반환 될 것이라고 기대하지 않을 것입니다.

우리가 "online_clients"카운트와 함께 테이블에서 server_id의 별개의 목록을 반환하고자한다면, 우리는이 같은 쿼리 사용할 수 있습니다

SELECT a.server_id 
    , SUM(ISNULL(a.date_end)) AS online_clients 
    FROM `user_activity` a 
GROUP BY a.server_id 
+0

감사합니다. 보스. 오, 당신 말이 맞아요. 나는 너무 바보 같아. D 감사합니다. – OhGodWhy