Вывод из БД SQL

Добрый день, подскажите пожалуйста по SQL что делаю не так, есть 2 таблицы в БД

Код (Text):
  1. CREATE TABLE `sale_bd` (
  2.   `id_sdelka` int(11) NOT NULL,
  3.   `prefix` varchar(50) NOT NULL,
  4.   `client` varchar(20) NOT NULL,
  5.   `date_sdelki` date NOT NULL,
  6.   `sum_sdelka` decimal(50,2) NOT NULL,
  7.   `marzha_sdelka` decimal(50,2) NOT NULL,
  8.   `close` int(3) NOT NULL,
  9.   `users` varchar(255) NOT NULL,
  10.   `month` int(50) NOT NULL
  11. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

и вторая

Код (Text):
  1. CREATE TABLE `sale_post_bd` (
  2.   `id_post` int(50) NOT NULL,
  3.   `id_sale_bd` int(50) NOT NULL,
  4.   `sale_logist` int(3) NOT NULL,
  5.   `company` varchar(255) NOT NULL,
  6.   `num_chet` varchar(255) NOT NULL,
  7.   `sum_cheta` decimal(50,2) NOT NULL,
  8.   `upd` varchar(255) NOT NULL,
  9.   `date_close` date NOT NULL,
  10.   `sum_close` decimal(50,2) NOT NULL,
  11.   `close` int(3) NOT NULL
  12. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

первая хранит всю инфу по сделке а вторая расходы по каждой из них

как постоить запрос чтоб вывести `users` сумму сделок по каждому пользователю и из второй общую сумму расходов столбец колонка `sum_close`

пишу запрос

Код (Text):
  1. 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):
  1. 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):
  1. SELECT `users`,
  2.     `sum_sdelka`,
  3.     `sum_close`
  4. FROM `sale_bd`
  5. LEFT JOIN (
  6.     SELECT `id_sale_bd`, sum(`sum_close`) as sum_close
  7.     FROM `sale_post_bd`
  8.     GROUP BY `id_sale_bd`
  9. ) `sales` ON `sales`.`id_sale_bd` = `id_sdelka`

Пример: https://sqlize.online/sql/mysql80/ee694e9eaba0b2fd82c818d85af90f15/

 

не совсем так работает как надо, он выводит сумму по каждой сделке а мне нужна общая по каждому пользователю

 

Тогда так: https://sqlize.online/sql/mysql80/ac3d14b44f7d9b9a6b3d823a28e31878/

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *