T-SQL "partition by" дает не такие результаты, как ожидалось

Я пытаюсь получить общее количество адресов электронной почты с помощью логики разбиения. Как вы можете видеть в электронной таблице набора результатов, первая запись верна — этот конкретный адрес электронной почты существует 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»: enter image description here

Пожалуйста, предоставьте образцы данных и ожидаемый результат и, пожалуйста, не публикуйте изображение. Используйте форматированный текст.

Squirrel 17.05.2022 03:54
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
1
27
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий
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 (для пример мин или макс).

George Menoutis 17.05.2022 06:48

Второй блок кода работает! Спасибо Крис!

Mike Marks 17.05.2022 17:21

Другие вопросы по теме