У меня есть четыре отдела стола, команда, расход и заработок.MY sql sumif return double count
Вылет Таблица:
id depart
команды Таблица:
id name depart_id
расходы Таблица:
id team_id expense_type amount date
И Начисление Таблица:
id team_id earning_type earning_peace date
Я хочу рассчитать общую сумму расходов на выезд и общую заработную плату. Я использую этот запрос:
SELECT d.id, d.depart,
SUM(if(`earning_type` = 1, earning_peace, 0)) as earning_peace1,
SUM(if(`earning_type` = 2, earning_peace, 0)) as earning_peace2,
SUM(if(`earning_type` = 3, earning_peace, 0)) as earning_peace3,
SUM(if(`earning_type` = 4, earning_peace, 0)) as earning_peace4,
SUM(if(`expense_type` = 1, amount, 0)) as `expense1`,
SUM(if (`expense_type` = 2, amount, 0)) as expense2,
SUM(if (`expense_type` = 3, amount, 0)) as expense3,
SUM(if (`expense_type` = 4, amount, 0)) as expense4
FROM depart d INNER JOIN team m ON d.id = m.depart_id
LEFT JOIN earning e ON m.id = e.team_id
LEFT JOIN expense ex ON ex.team_id = m.id
GROUP BY d.id
Но запрос возвращает двойное количество общего дохода на каком-то участке. Какая ошибка в этом запросе какая-либо помощь?
Вы создаете многоотводное дерево соединений с d-> m-> e и d-> m-> ex. это может привести к нечетным результатам, подобным этому. –
@Marc B Да, но какое решение? – Zia
не делайте многоотводные соединения. сделайте 'select * from ....' без сумм, и вы увидите, как сумасшедшие могут выглядеть, когда вы делаете многоотвод. –