2013-05-02 2 views
3

다음 데이터가 있다고 가정 해 봅시다. 두 개의 개별 조건에서 카운트 선택

id name_id completed 
1 10   1 
2 10   0 
3 15   1 
4 10   0 
5 20   1 
6 15   0 
7 20   1 
8 15   0 

나는 내가 쿼리에 포함 할 두 번째 구성 요소가,

SELECT name_id, COUNT(*) FROM db 
GROUP BY name_id 

지금은 아주 간단합니다 이름 아이디에 의해 수를 찾기 위해 노력하고있어. name_id.error가 10

, 나는이 완료 단지 그 값을 계산하는 name_id.error가의의 다른 1.되고 싶어, 나는 그래서이와 끝까지해야 관계없이 0 또는

1.인지 여부를 선택합니다 : 그냥 완료되면 1이기 때문에 다른 카운트 사람이이 작업을 도와 줄 수 모두 0과 1

을 포함하면서

name_id  count(*) 
10   1 
15   3 
20   2 

name_id.error가 10 만 1의 수를 가지고있다.

감사합니다.

답변

4

집계 함수 내에 CASE 표현식을 사용할 수 있습니다.

SELECT name_id, 
    sum(case 
      when name_id = 10 
      then case when completed = 1 then 1 else 0 end 
      else 1 end) Total 
FROM db 
GROUP BY name_id; 

SQL Fiddle with Demo을 참조하십시오.

3

name_id = 10completed = 0 행 제외 :이 10이면

SELECT name_id, COUNT(*) FROM db 
WHERE NOT (completed = 0 AND name_id = 10) 
GROUP BY name_id 
1
SELECT name_id, COUNT(*) FROM db 
WHERE name_id != 10 or completed = 1 
GROUP BY name_id 
1

카운트가 name_id 10.없고, 계산시 completed = 1 :

SELECT 
name_id, 
COUNT(CASE WHEN name_id <> 10 or completed = 1 THEN 1 END) 
FROM db 
GROUP BY name_id 
관련 문제