2009-09-10 2 views
2

SQL 쿼리에서 두 클래스의 값을 어떻게 집계 할 수 있습니까?

나는 다음과 같은 쿼리를 사용하여 하나를 얻을 수 있습니다 :

SELECT user_id, sum(end - start) AS billable_time WHERE billable = TRUE GROUP BY user_id; 

그러나 두 개의 열이 필요합니다. 같은 크기의 unbillable time이 필요합니다.

SELECT user_id, sum(end - start) AS unbillable_time WHERE billable = FALSE GROUP BY user_id; 

어떻게 하나의 쿼리로 두 값을 얻을 수 있습니까?

답변

3
select user_id, sum(case billable when 1 then (end - start) end) as can_bill, 
    sum(case billable when 0 then (end - start) end) as unbillable 
+0

이렇게하면 다음과 같은 오류가 표시됩니다. 오류 : '사례'또는 근처에서 구문 오류가 발생했습니다. 줄 1 : ... (사례 청구 가능 사례 : 종료 됨 - 시작됨 END CASE) AS ... –

+0

변경 만하면됩니다. 'end case'를'end'로 끝내면 작동합니다. 감사! –

+0

죄송합니다. MySQL 저장 프로 시저 구문을 실수로 사용했습니다. – dnagirl

0
SELECT user_id, billable, sum(end - start) AS billable_time 
GROUP BY user_id,billable; 
+0

. 나는 그것이 명백했다라고 생각했다. 그러나 나는 내가 질문을 깨끗하게하는 것이 좋을 것이다라고 생각한다. –

+0

응용 프로그램 계층에서 프레젠테이션을 더 빠르고 쉽게 할 수 있습니다. 내 다른 대답은 당신에게 속도의 희생으로 원하는 레이아웃을 줄 것이다. – dnagirl

+0

동의합니다. 그러나 나는 "데이터베이스에 넣으십시오"라고 말했습니다. 그래서이 구조체는 같은 구조의 테이블을 업데이트하는 cron 작업입니다. Faugh. –

관련 문제