2014-03-05 65 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 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'; 

你的查詢有它正試圖在同一select使用列別名(total_vouchertotal_used)問題聲明。 SQL不支持這一點。您需要使用子查詢來獲得該功能。

+0

不會'coalesce(SUM(value),0))'返回0即使只有一個值爲NULL? –

+0

@VolkanUlukut。 。 。一點都不。 sum()忽略NULL值。如果所有的值都是NULL,它只會返回0。 –

+0

對不起,您是對的。 –