ВЫБЕРИТЕ из разных таблиц и получите один результат [mysql] [union] или [join]

0

Ребята, вы можете мне помочь, чтобы создать правильный выбор 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

Любая помощь оценивается.

Теги:
join
union

1 ответ

1
Лучший ответ

Конечно, суммы слишком велики, я полагаю, что и расходы, и пользователи возвращают более одной строки, а суммы вычисляются по всем строкам, поэтому, если есть три пользователя, то оценка будет в три раза больше, чем вы хотите. Предполагая, что проекты возвратят только одну строку, это может работать лучше:

    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
  • 0
    Почти :) Бюджет и дополнительная_ценка в порядке, но оценочные_часы и время_отрасли не верны. Слишком маленькие значения.
  • 0
    Если я сгруппируюсь по user_id, то у меня есть: preview.ibb.co/cG74FU/Schowek_1.jpg Мне нужна сумма, также оцененная_часов, и время_расхода, чтобы получить 1740 и 1320
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню