2012-10-28 157 views
0

编辑:我需要在那里减去直接和间接分钟的总数。SELECT语句子查询

我想要SUM M.分钟作为别名“dminutes”。然后,再次取M.minutes的SUM并减去具有“间接”列值的M.minutes(并给它“inminutes”别名)。但是,它显示为空,所以语法错误。建议?

table = tasks 
column = task_type 


Example: 
M.minutes total = 60 minutes 
M. minutes (with "direct" task_type column value) = 50 minutes (AS dminutes) 
M. minutes (with "indirect" task_type column value) = 10 minutes (AS inminutes) 

SQL语句:

SELECT 
U.user_name, 
SUM(M.minutes) as dminutes, 
ROUND(SUM(M.minutes))-(SELECT (SUM(M.minutes)) from summary s WHERE ta.task_type='indirect') as inminutes 
FROM summary S 
JOIN users U ON U.user_id = S.user_id 
JOIN tasks TA ON TA.task_id = S.task_id 
JOIN minutes M ON M.minutes_id = S.minutes_id 
WHERE DATE(submit_date) = curdate() 
AND TIME(submit_date) BETWEEN '00:00:01' and '23:59:59' 
GROUP BY U.user_name 
LIMIT 0 , 30 

回答

1

我觉得这样的事情应该工作。

您可能需要调整一下。

SELECT direct.duser_id, indirect.iminutes, direct.dminutes, 
    direct.dminutes - indirect.iminutes FROM 
    (SELECT U.user_id AS iuser_id, SUM(M.minutes) AS iminutes 
    FROM summary S 
    JOIN users U 
    ON U.user_id = S.user_id 
    JOIN minutes M 
    ON M.minutes_id = S.minutes_id 
    JOIN tasks TA 
    ON TA.task_id = S.task_id 
    WHERE TA.task_type='indirect' 
    AND DATE(submit_date) = curdate() 
    AND TIME(submit_date) BETWEEN '00:00:01' and '23:59:59' 
    GROUP BY U.user_id) AS indirect 
JOIN 
    (SELECT U.user_id AS duser_id, SUM(M.minutes) AS dminutes 
    FROM summary S 
    JOIN users U 
    ON U.user_id = S.user_id 
    JOIN minutes M 
    ON M.minutes_id = S.minutes_id 
    JOIN tasks TA 
    ON TA.task_id = S.task_id 
    WHERE TA.task_type='direct' 
    AND DATE(submit_date) = curdate() 
    AND TIME(submit_date) BETWEEN '00:00:01' and '23:59:59' 
    GROUP BY U.user_id) AS direct 
WHERE indirect.iuser_id = direct.duser_id 
+0

我认为你是正确的,在正确的轨道上!虽然,我得到一个语法错误..我试过调整它,但它不喜欢临时表加入“ON iuser_id = duser_id”。错误:#1064 - 你的SQL语法错误;检查与你的MySQL服务器版本相对应的手册,在'ON iuser_id = duser_id'附近使用正确的语法'' – Mike

+0

你是我的朋友,是某种巫师!哈哈它完美的工作,谢谢你! – Mike

+0

这对我来说很疯狂,需要多少编码才能在Mysql中进行简单的减法工作。不要误解我的意思,我喜欢它,因为我只需要做一次,然后声明就会永远使用,但是人......大声笑 – Mike

1

SUM是一个讨厌的小功能:

http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_sum

Returns the sum of expr. If the return set has no rows, SUM() returns NULL. The DISTINCT keyword can be used to sum only the distinct values of expr.

SUM() returns NULL if there were no matching rows.

尝试包装SUM的COALESCE或IFNULL:

... COALESCE(SUM(whatever), 0) ... 
+0

那张照片是什么? – Kermit

+0

这是一个复制粘贴故障:) – biziclop

+0

+1的包装想法 – inhan