За последние 24 часа нас посетили 36769 программистов и 7745 роботов. Сейчас ищут 1714 программистов ...

Вывод из БД SQL

Тема в разделе "PHP для новичков", создана пользователем Дато, 1 сен 2023.

  1. Дато

    Дато Активный пользователь

    С нами с:
    11 ноя 2021
    Сообщения:
    48
    Симпатии:
    1
    Добрый день, подскажите пожалуйста по 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 запроса писать и потом собирать в кучу не хочется.
    как это исправить? если форумом ошибся прошу понять и простить
     
  2. Slava Rozhnev

    Slava Rozhnev Новичок

    С нами с:
    6 сен 2021
    Сообщения:
    87
    Симпатии:
    26
    Адрес:
    https://phpize.online
    Следует выполнить группировку второй таблицы перед объединением

    Код (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/
     
  3. Дато

    Дато Активный пользователь

    С нами с:
    11 ноя 2021
    Сообщения:
    48
    Симпатии:
    1
    не совсем так работает как надо, он выводит сумму по каждой сделке а мне нужна общая по каждому пользователю
     
  4. Slava Rozhnev

    Slava Rozhnev Новичок

    С нами с:
    6 сен 2021
    Сообщения:
    87
    Симпатии:
    26
    Адрес:
    https://phpize.online
    Тогда так: https://sqlize.online/sql/mysql80/ac3d14b44f7d9b9a6b3d823a28e31878/
     
    Дато нравится это.
  5. Дато

    Дато Активный пользователь

    С нами с:
    11 ноя 2021
    Сообщения:
    48
    Симпатии:
    1