从不同的表中选择,并得到一个结果 [mysql] [union] 或 [join]



>伙计们,你能帮我建立一个适当的mysql选择,并连接下面的选择吗?

我的选择分别看起来像这样:

SELECT budget as budget from projects where id =96
SELECT sum(value) as expenses from expenses where project_id =96 
SELECT sum(estimated_hours * t2.man_hour) as estimated from project_has_tasks t1 left join 
users t2 on t1.user_id = t2.id where project_id =96
SELECT sum(TIME_FORMAT(SEC_TO_TIME (time_spent),'%k.%i' )
* t2.man_hour) as time_spent_cost FROM project_has_tasks t1
left join users t2 on t1.user_id = t2.id where t1.project_id ='96'

它们工作正常,但我想实现一个结果,例如:

| budget | expenses  | estimated | time_spent_cost |
____________________________________________________
| 298833 |   24234   |  4434333  |   343434        |   

无论如何,我刚刚构建了一个通用选择,但它无法正常工作 (不正确的总和...

SELECT t1.project_id, t3.budget, 
IFNULL(sum(t4.value),0) as additional_costs, 
IFNULL(sum(estimated_hours)* t2.man_hour ,0) 
as estimated_hours_costs, 
IFNULL(TIME_FORMAT(SEC_TO_TIME 
(sum(t1.time_spent)),'%k.%i' )* t2.man_hour,0) 
as time_spent_cost, NOW() 
FROM project_has_tasks t1 left join 
users t2 on t1.user_id = t2.id left join 
projects t3 on t1.project_id = t3.id 
left join expenses t4 
on t1.project_id = t4.project_id 
WHERE t1.project_id ='96' group by t1.project_id

任何帮助表示赞赏。

当然,总和太高了,我假设费用和用户都返回多行,并且所有行都计算总和,因此如果有三个用户,那么估计将是您想要的值的三倍。假设项目只返回一行,这可能会更好:

SELECT t1.project_id, t3.budget, 
(SELECT sum(IFNULL(t4.value,0))
FROM expenses t4 
WHERE t1.project_id = t4.project_id) as additional_costs, 
sum(IFNULL(t1.estimated_hours* t2.man_hour,0)) as estimated_hours_costs, 
sum(IFNULL(TIME_FORMAT(SEC_TO_TIME (t1.time_spent),'%k.%i' )* t2.man_hour,0)) as time_spent_cost, 
NOW() 
FROM project_has_tasks t1 
left join users        t2 on t1.user_id    = t2.id
left join projects     t3 on t1.project_id = t3.id 
WHERE t1.project_id ='96'
group by t1.project_id

最新更新