объединение справочной и расчетной таблиц в sql
Создаю таблицу по конкретным источникам прихода клиентов в компанию с помощью 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 шт):
Автор решения: Dmitrii Malygin
→ Ссылка
Можно в 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%';