объединение справочной и расчетной таблиц в sql

Рейтинг: 1Ответов: 1Опубликовано: 16.05.2023

Создаю таблицу по конкретным источникам прихода клиентов в компанию с помощью SQL. Получаю расчетную таблицу. Прошу помочь в решении такого вопроса: как добавить столбцы с общими значениями по выручке (sum(СуммаЧека) as ОбщаяВыручка), количеству заказов (count(НомерЗаказа) as ОбщееКоличествоЗаказов), сумме заказов (sum(СуммаЗаказа) as ОбщаяСуммаЗаказа), числу уникальных клиентов (count(distinct ИдентификаторКлиента)) в эту же таблицу в разрезе имеющихся дат, полученных при построении расчетной таблицы?

Сам запрос таков:

select 
    ДатаЗаказа,
    Сайт,
    МобильноеПриложение,
    Состояние,
    ИдентификаторКлиента,
    Выручка,
    СуммаЗаказа,
    КоличествоЗаказов,
    ПервыйИсточник
FROM
(select
    cast(ДатаДок as date) as ДатаЗаказа,
    Сайт,
    МобильноеПриложение,
    Состояние,
    ИдентификаторКлиента,
    sum(СуммаЧека) as Выручка,
    sum(СуммаЗаказа) as СуммаЗаказа,
    count(НомерЗаказа) as КоличествоЗаказов,
    FIRST_VALUE (Сайт) OVER (PARTITION BY ИдентификаторКлиента ORDER BY ДатаДок) as ПервыйИсточник
from
    ЗПРТ_View
where
    ДатаДок >= '2022-01-01'
    and ССайта = 'TRUE' 
group by
    cast(ДатаДок as date),
    РТ,
    Сайт,
    ССайта,
    МобильноеПриложение,
    Состояние,
    ИндивидуальныйЗаказ,
    ИдентификаторКлиента) AS TFV
Where ПервыйИсточник like '%NNN%' 
      OR ПервыйИсточник Like '%BBB%'

Ответы

▲ 1Принят

Можно в select добавить агрегирующие оконные функции. Тогда запрос будет выглядеть так:

SELECT
    ДатаЗаказа,
    Сайт,
    МобильноеПриложение,
    Состояние,
    ИдентификаторКлиента,
    Выручка,
    СуммаЗаказа,
    КоличествоЗаказов,
    ПервыйИсточник,
    ОбщаяВыручка,
    ОбщееКоличествоЗаказов,
    ОбщаяСуммаЗаказа,
    УникальныхКлиентов
FROM
    (SELECT
        cast(ДатаДок AS DATE) AS ДатаЗаказа,
        Сайт,
        МобильноеПриложение,
        Состояние,
        ИдентификаторКлиента,
        SUM(СуммаЧека) AS Выручка,
        SUM(СуммаЗаказа) AS СуммаЗаказа,
        COUNT(НомерЗаказа) AS КоличествоЗаказов,
        FIRST_VALUE(Сайт) OVER (PARTITION BY ИдентификаторКлиента ORDER BY ДатаДок) AS ПервыйИсточник,
        SUM(СуммаЧека) OVER (PARTITION BY ДатаЗаказа) AS ОбщаяВыручка,
        COUNT(НомерЗаказа) OVER (PARTITION BY ДатаЗаказа) AS ОбщееКоличествоЗаказов,
        SUM(СуммаЗаказа) OVER (PARTITION BY ДатаЗаказа) AS ОбщаяСуммаЗаказа,
        COUNT(DISTINCT ИдентификаторКлиента) OVER (PARTITION BY ДатаЗаказа) AS УникальныхКлиентов
    FROM
        ЗПРТ_View
    WHERE
        ДатаДок >= '2022-01-01'
        AND ССайта = 'TRUE'
    GROUP BY
        cast(ДатаДок AS DATE),
        РТ,
        Сайт,
        ССайта,
        МобильноеПриложение,
        Состояние,
        ИндивидуальныйЗаказ,
        ИдентификаторКлиента) AS TFV
WHERE
    ПервыйИсточник LIKE '%NNN%'
    OR ПервыйИсточник LIKE '%BBB%';