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

Как объяснить логику следующего SQL запроса?

Запрос следующий:

with tbl as
(
select [Week], Client
from (values (1, 'a'),
(1, 'b'),
(1, 'c'),
(2, 'f'),
(2, 'a'),
(3, 'q'),
(3, 'y'),
(3, 'c')) as tbl ([Week], Client)
)
select tbl.[Week], count(distinct t1.Client)
from tbl
inner join tbl t1
on tbl.[Week] >= t1.[Week]
group by tbl.[Week]


Запрос выдает уникальные значения накопленным итогом.
Но понять логику его выполнения не могу, особенно с inner join (объяснять как работает inner join не нужно).

Может кто-нибудь подробно описать, что делает запрос?
  • Вопрос задан
  • 161 просмотр
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@dmitryKovalskiy
программист средней руки
Если в двух словах - это тенденция роста уникальных клиентов по неделям. Гуглить - "Нарастающий итог". Фактически к первой неделе джойнятся записи за первую неделю, ко второй - за первую и вторую и т.д. согласно условию tbl.[Week] >= t1.[Week]
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Каждый клиент джойнится с клиентами текущей и предыдущей недели. Так за 1 неделю будет 9 клиентов! Потом группируются по tbl.Week, чтобы получить уникальные недели. По каждой недели агрегация клиентов - сумма уникальных клиентов. За счёт подсчёта уникальных первый джойн корректируется и получаем 3 клиента вместо 9
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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