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

cwxwcias  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(334)

伙计们,你们能帮我建立一个合适的mysql select与以下这些选择的连接吗?
我的选择如下所示:

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

他们工作正常,但我想达到一个结果,如:

  1. | budget | expenses | estimated | time_spent_cost |
  2. ____________________________________________________
  3. | 298833 | 24234 | 4434333 | 343434 |

无论如何,我刚刚建立了一个公共选择,但它不能正常工作(不正确的总和…)

  1. SELECT t1.project_id, t3.budget,
  2. IFNULL(sum(t4.value),0) as additional_costs,
  3. IFNULL(sum(estimated_hours)* t2.man_hour ,0)
  4. as estimated_hours_costs,
  5. IFNULL(TIME_FORMAT(SEC_TO_TIME
  6. (sum(t1.time_spent)),'%k.%i' )* t2.man_hour,0)
  7. as time_spent_cost, NOW()
  8. FROM project_has_tasks t1 left join
  9. users t2 on t1.user_id = t2.id left join
  10. projects t3 on t1.project_id = t3.id
  11. left join expenses t4
  12. on t1.project_id = t4.project_id
  13. WHERE t1.project_id ='96' group by t1.project_id

谢谢你的帮助。

knsnq2tg

knsnq2tg1#

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

  1. SELECT t1.project_id, t3.budget,
  2. (SELECT sum(IFNULL(t4.value,0))
  3. FROM expenses t4
  4. WHERE t1.project_id = t4.project_id) as additional_costs,
  5. sum(IFNULL(t1.estimated_hours* t2.man_hour,0)) as estimated_hours_costs,
  6. sum(IFNULL(TIME_FORMAT(SEC_TO_TIME (t1.time_spent),'%k.%i' )* t2.man_hour,0)) as time_spent_cost,
  7. NOW()
  8. FROM project_has_tasks t1
  9. left join users t2 on t1.user_id = t2.id
  10. left join projects t3 on t1.project_id = t3.id
  11. WHERE t1.project_id ='96'
  12. group by t1.project_id

相关问题