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
也可以,但我找不到合适的数据集来测试。
我想要做的是通过使用分区逻辑获得“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
也可以,但我找不到合适的数据集来测试。