Задать вопрос

Как объединить 3 зароса mysql в один?

Здравствуйте,

Есть таблица `orders` с полями:
id
status
date_create
date_modified

Нужно объединить 3 запроса:
SELECT count(`id`) AS `All_ord`, `date_create` FROM `ordres` GROUP BY `date_create`
SELECT count(`id`) AS `Success_ord`, `date_modified` as `date_create` FROM `ordres` WHERE `status` = 2 GROUP BY `date_create`
SELECT count(`id`) AS `Cancel_ord`, `date_modified` as `date_create` FROM `ordres` WHERE `status` = 3 GROUP BY `date_create`


Простой left join не подходит, т.к. может быть такое, что за дату изменения не было ни одного заказа, т.е. на выходе хочу получить такой формат:
ddd5d658899747fca68ad9f3ebd6bdca.png
  • Вопрос задан
  • 343 просмотра
Подписаться 2 Оценить Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Stepik
    Язык программирования PHP
    1 неделя
    Далее
Решения вопроса 1
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT * 
    FROM (
    SELECT DISTINCT `date_create` 
        FROM  `ordres`
        UNION SELECT `date_modified` 
            FROM `ordres`
            WHERE `status` IN (2, 3)
    ) AS `date`
    LEFT JOIN (
        SELECT COUNT(*) AS `count`, `date_create`
            FROM `ordres`
            GROUP BY `date_create`
    ) AS `all` ON `all`.`date_create`  = `date`.`date_create`
    LEFT JOIN (
        SELECT COUNT(*) AS `count`, `date_modified`
            FROM `ordres`
            WHERE `status` = 2
            GROUP BY `date_modified`
    ) AS `succ` ON `succ`.`date_modified` = `date`.`date_create`
    LEFT JOIN (
        SELECT COUNT(*) AS `count`, `date_modified`
            FROM `ordres`
            WHERE `status` = 3
            GROUP BY `date_modified`
    ) AS `canc` ON `canc`.`date_modified` = `date`.`date_create`
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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