Добрый день, подскажите пожалуйста по SQL что делаю не так, есть 2 таблицы в БД
Код (Text):
CREATE TABLE `sale_bd` ( `id_sdelka` int(11) NOT NULL, `prefix` varchar(50) NOT NULL, `client` varchar(20) NOT NULL, `date_sdelki` date NOT NULL, `sum_sdelka` decimal(50,2) NOT NULL, `marzha_sdelka` decimal(50,2) NOT NULL, `close` int(3) NOT NULL, `users` varchar(255) NOT NULL, `month` int(50) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;и вторая
Код (Text):
CREATE TABLE `sale_post_bd` ( `id_post` int(50) NOT NULL, `id_sale_bd` int(50) NOT NULL, `sale_logist` int(3) NOT NULL, `company` varchar(255) NOT NULL, `num_chet` varchar(255) NOT NULL, `sum_cheta` decimal(50,2) NOT NULL, `upd` varchar(255) NOT NULL, `date_close` date NOT NULL, `sum_close` decimal(50,2) NOT NULL, `close` int(3) NOT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8;первая хранит всю инфу по сделке а вторая расходы по каждой из них
как постоить запрос чтоб вывести `users` сумму сделок по каждому пользователю и из второй общую сумму расходов столбец колонка `sum_close`
пишу запрос
Код (Text):
SELECT `users`, sum(`sum_sdelka`) as sum_sdelka, sum(`sum_close`) as sum_close FROM `sale_bd` LEFT JOIN `sale_post_bd` ON `id_sale_bd` = `id_sdelka` GROUP BY `users`он возвращает все что мне нужно единственное `sum_sdelka` умножает на количество строк во второй таблице а если писать запрос вот так
Код (Text):
SELECT t1.users, sum(t1.sum_sdelka) as sum_sdelka, coalesce(sum(t2.sum_close),0) as sum_close FROM ( select users, sum(sum_sdelka) as sum_sdelka from sale_bd group by users, sum_sdelka ) t1 left join ( select sum(sum_close) as sum_close from sale_post_bd ) t2 ON ‘t1.id_sdelka’ = ‘t2.id_sale_bd’ GROUP BY usersто возвращает 3 столбца но в `sum_close` NULL
в 2 запроса писать и потом собирать в кучу не хочется.
как это исправить? если форумом ошибся прошу понять и простить
Следует выполнить группировку второй таблицы перед объединением
Код (Text):
SELECT `users`, `sum_sdelka`, `sum_close` FROM `sale_bd` LEFT JOIN ( SELECT `id_sale_bd`, sum(`sum_close`) as sum_close FROM `sale_post_bd` GROUP BY `id_sale_bd` ) `sales` ON `sales`.`id_sale_bd` = `id_sdelka`Пример: https://sqlize.online/sql/mysql80/ee694e9eaba0b2fd82c818d85af90f15/
не совсем так работает как надо, он выводит сумму по каждой сделке а мне нужна общая по каждому пользователю
Тогда так: https://sqlize.online/sql/mysql80/ac3d14b44f7d9b9a6b3d823a28e31878/
А вот это работает. огромное спасибо