[Решено] Выборка из одной таблицы одного поля, но с разными условиями

Тема в разделе "Базы Данных", создана пользователем Den1a, 25 фев 2018.

Статус темы:
Закрыта.
  1. Den1a

    Den1a

    Регистрация:
    16 авг 2013
    Сообщения:
    55
    Симпатии:
    3
    Вот примерный запрос. Не знаю как условие дописать правильно.
    Код:
    SELECT o.total_old, n.total_now
    FROM
    (SELECT SUM(total) AS total_old FROM oc_order WHERE date_added BETWEEN '2018-01-01' AND '2018-01-25' GROUP BY DAY(date_added)) o,
    (SELECT SUM(total) AS total_now FROM oc_order WHERE date_added BETWEEN '2018-02-01' AND '2018-02-25' GROUP BY DAY(date_added)) n
    WHERE
     
  2. Master2KAZ

    Master2KAZ

    Регистрация:
    25 окт 2014
    Сообщения:
    183
    Симпатии:
    72
    Опишите, что вы хотите сделать.
     
  3. Den1a

    Den1a

    Регистрация:
    16 авг 2013
    Сообщения:
    55
    Симпатии:
    3
    За текущий месяц подсчитать сумму заказов с группировкой по дням.
    За предыдущий месяц подсчитать сумму заказов с группировкой по дням.

    Т.е. 1 числа этого месяца было заказов на 5р., а в прошлом месяце 1 числа 4р. и так по всему месяцу.

    Дальше эту выбору наложить на график.
     
  4. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.562
    Симпатии:
    1.472
    что мешает сделать это через UNION ?
    Код:
    (SELECT SUM(total) AS total_old FROM oc_order WHERE date_added BETWEEN '2018-01-01' AND '2018-01-25' GROUP BY DAY(date_added)),
    UNION ALL
    (SELECT SUM(total) AS total_now FROM oc_order WHERE date_added BETWEEN '2018-02-01' AND '2018-02-25' GROUP BY DAY(date_added))
    
     
  5. Den1a

    Den1a

    Регистрация:
    16 авг 2013
    Сообщения:
    55
    Симпатии:
    3
    В результате должно быть два поля. Юнион просто объединяет выборку 2-х запросов по 1-му полю.
    Код:
    total_old total_now
     
  6. $iD

    $iD Команда форума

    Регистрация:
    13 мар 2012
    Сообщения:
    3.562
    Симпатии:
    1.472
    1. делаем один запрос, делаем другой запрос, делаем объедение на стороне бэкэнда и расслабляемся. Для того чтобы избавится от условий, просто делаем группировку по MONTH и DAY
    2. Ну или бред вида:
    Код:
    SELECT
    (SELECT SUM(total) AS total_old FROM oc_order WHERE date_added BETWEEN '2018-01-01' AND '2018-01-25' GROUP BY DAY(date_added)) old
    (SELECT SUM(total) AS total_now FROM oc_order WHERE date_added BETWEEN '2018-02-01' AND '2018-02-25' GROUP BY DAY(date_added)) new
    FROM oc_order
    WHERE date_added >= '2018-01-01' AND date_added <= '2018-02-25'
    
    но это будет алаверды с каждым месяцем или при большом кол-ве данных
     
    Master2KAZ нравится это.
  7. Den1a

    Den1a

    Регистрация:
    16 авг 2013
    Сообщения:
    55
    Симпатии:
    3
    --- Добавлено, 26 фев 2018 ---
    Вот так завелось. Всем спасибо!

    Код:
    SELECT total_old, total_now
    FROM
    (SELECT SUM(total) AS total_old, DAY(date_added) AS date_old FROM oc_order WHERE date_added >= '2018-01-01' AND date_added < '2018-01-05' GROUP BY DAY(date_added)) o,
    (SELECT SUM(total) AS total_now, DAY(date_added) AS date_now FROM oc_order WHERE date_added >= '2018-02-01' AND date_added < '2018-02-05' GROUP BY DAY(date_added)) n
    WHERE date_old = date_now;
     
Статус темы:
Закрыта.