T-SQL "partition by" 结果不符合预期

T-SQL "partition by" results not as expected

我想要做的是通过使用分区逻辑获得“EmailAddresses”的总数。正如您在结果集电子表格中看到的那样,第一条记录是正确的——这个特定的电子邮件地址出现了 109 次。但是,第二条记录,相同的电子邮件地址,numberOfEmailAddresses 列显示 108。依此类推 - 只是在相同的电子邮件地址上保持向下递增 1。显然,我写的 SQL 不对,我希望得到一些关于我可能做错了什么的反馈。

我想看到的是这个特定电子邮件地址在 numberOfEmailAddresses 列下方始终显示的数字 109。我可能做错了什么?

这是我的代码:

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

会得到你想要的。我认为在你的分区函数中包含 order by 是导致计数下降的原因。据我所知,在分区函数中排序进一步细分了分区。

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

也可以,但我找不到合适的数据集来测试。