2014-03-05 5 views
0

총 왼쪽 계산 같지 않아 혼란 스럽네요.MySQL 별칭 계산

나는 전체 바우처를 얻고 총 사용량과 남은 총량을 얻으려고합니다.

도와주세요.

SELECT 
(IFNULL(SUM(value), 0)) AS total_voucher, 
(
    SELECT 
    IFNULL(SUM(value), 0)) 
    FROM 
    voucher_history 
    WHERE 
    idUser = 1 AND isUsed = 1 AND DATE(FROM_UNIXTIME(datetime)) = '2014-03-04' 
) AS total_used, 

(total_voucher-total_used) AS total_left 

FROM 
voucher_history 
WHERE 
idUser = 1 AND isUsed = 0 AND DATE(FROM_UNIXTIME(datetime)) <= '2014-03-05' 

답변

3

당신은 오히려 하위 쿼리를 사용하는 것보다, 조건부 집계하여이 작업을 수행 할 수 있습니다

귀하의 쿼리는 같은 select에 열 별칭 ( total_vouchertotal_used)를 사용하려고하는 문제가
SELECT coalesce(SUM(value), 0)) AS total_voucher, 
     sum(case when is_used = 1 then value else 0 end) as total_used, 
     sum(case when is_used = 1 then 0 else value end) as total_left 
FROM voucher_history 
WHERE idUser = 1 AND DATE(FROM_UNIXTIME(datetime)) <= '2014-03-05'; 

성명서. SQL은 이것을 지원하지 않습니다. 해당 기능을 사용하려면 하위 쿼리를 사용해야합니다.

+0

은 하나의 값이 NULL 인 경우에도 '합쳐서 (SUM (value), 0))'0을 반환합니까? –

+0

@VolkanUlukut. . . 아니, 전혀. 'sum()'은'NULL' 값을 무시합니다. * all * 값이'NULL' 인 경우에만'0'을 반환합니다. –

+0

죄송합니다. –