Я пытаюсь получить общее количество адресов электронной почты с помощью логики разбиения. Как вы можете видеть в электронной таблице набора результатов, первая запись верна — этот конкретный адрес электронной почты существует 109 раз. Но вторая запись, тот же адрес электронной почты, столбец numberOfEmailAddresses
показывает 108. И так далее — просто продолжает увеличиваться на 1 на том же адресе электронной почты. Ясно, что я неправильно пишу этот SQL, и я надеялся получить отзывы о том, что я мог делать неправильно.
Что я хотел бы видеть, так это число 109, последовательно расположенное внизу столбца numberOfEmailAddresses
для этого конкретного адреса электронной почты. Что я могу делать неправильно?
Вот мой код:
select
Q1.SubscriberKey,
Q1.EmailAddress,
Q1.numberOfEmailAddresses
from
(select
sub.SubscriberKey as SubscriberKey,
sub.EmailAddress as EmailAddress,
count(*) over (partition by sub.EmailAddress order by sub.SubscriberKey asc) as numberOfEmailAddresses
from
ent._Subscribers sub) Q1
И вот мой набор результатов, упорядоченный по «numberOfEmailAddresses»:
select distinct
Q1.SubscriberKey,
Q1.EmailAddress,
(select count(*) from ent._Subscribers sub where sub.EmailAddress = Q1.EmailAddress) as numberOfEmailAddress
from ent._Subscribers Q1
принесет вам то, что вы хотите. Я думаю, что включение порядка в вашу функцию разделения является причиной убывающего счета. Как я понимаю, порядок в функции раздела дополнительно подразделяет раздел.
select
Q1.SubscriberKey,
Q1.EmailAddress,
Q1.numberOfEmailAddresses
from
(select
sub.SubscriberKey as SubscriberKey,
sub.EmailAddress as EmailAddress,
count(*) over (partition by sub.EmailAddress) as numberOfEmailAddresses
from
ent._Subscribers sub) Q1
Может также работать, но я не могу найти подходящий набор данных для тестирования.
+1 за второе решение. Из документации: если он (ORDER BY) указан, а ROWS/RANGE не указан, то по умолчанию RANGE UNBOUNDED PRECEDING AND CURRENT ROW используется по умолчанию для рамки окна функциями, которые могут принимать необязательную спецификацию ROWS/RANGE (для пример мин или макс).
Второй блок кода работает! Спасибо Крис!
Пожалуйста, предоставьте образцы данных и ожидаемый результат и, пожалуйста, не публикуйте изображение. Используйте форматированный текст.