@Nana123

Как составить запрос MYSQL? Кто может помочь?

Не варит что то голова, помоги пожалуйста составить запрос есть 3 таблицы
1) Юзеры
2) Их заработок
3) Их выплтаты
Нужно посчитать их заработок, и выплату потом отнять от заработка выплату и сгрупировать по пользователям
Чтоб получилось
Вася 100 денег
Петя 20 денег
и т д 597181227abb40c694b94ef67d4f7264.png75bec7e6af824547a62f442d3e684f1d.png8a734c78ae1d413790497500f500912f.png
SELECT 
	user.`id`, 
	user.`login`, 
	SUM(moneyuser.money)- SUM(payments.money) AS 'sum' 
FROM 
	`user` 
	JOIN `moneyuser` ON (user.login = moneyuser.user) 
	JOIN `payments` ON (user.login = payments.user) 
GROUP BY 
	user.id


При таком запросе он умножает SUM(payments.money) на количество записей в moneyuser
  • Вопрос задан
  • 247 просмотров
Пригласить эксперта
Ответы на вопрос 2
Immortal_pony
@Immortal_pony Куратор тега PHP
SELECT 
    user.`id`,
    user.`login`,
    COALESCE(salary_table.`money_sum`, 0)-COALESCE(spending_table.`money_sum`, 0) AS 'sum'
FROM 
    `user`
    LEFT JOIN (
        SELECT 
            salary.user,
            SUM(salary.`money`) AS 'money_sum'
        FROM salary
        GROUP BY salary.`user`
    ) salary_table ON salary_table.`user`= user.`id` 
    LEFT JOIN (
        SELECT 
            spending.user,
            SUM(spending.`money`) AS 'money_sum'
        FROM spending
        GROUP BY spending.`user`
    ) spending_table ON spending_table.`user`= user.`id`
GROUP BY user.`id`
Ответ написан
Melkij
@Melkij
PostgreSQL DBA
select u.id, u.login
    coalesce(income.sum, 0) - coalesce(payment.sum, 0) as balance
    from users u
        left join (
            select user_id, sum(money) as sum from moneyuser group by user_id
        ) income ON u.id = income.user_id
        left join (
            select user_id, sum(money) as sum from payments group by user_id
        ) payment ON u.id = payment.user_id


left join и coalesce сделаны намеренно для корректного учёта пользователей, у кого ещё не было дохода либо выплат. Если нужно исключить пользователей, которые вообще ничего не делали, то допишите
where payment.user_id is null and income.user_id is null
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы