是否可以通过T-SQL中另一个窗口函数的结果对数据集进行排名?

问题描述

是否可以通过另一个窗口函数的结果对数据集进行排名?

例如,我在下面有这样的查询

select distinct 
    country,cast(sum(Sessions) over (partition by country) as float) / cast(sum(sessions) over() as float) as sess_prcnt
from 
    GoogleAnalytics.dbo.SiteVisitsLog
order by 
    sess_prcnt desc

我想要做的是按sess_prcnt列对国家/地区进行排名。 添加rank() over(order by sess_prcnt) 之类的行或使用CTE都会出错。

提前谢谢!

解决方法

您说使用CTE会产生错误-它们会导致哪种错误?例如,做类似

的任何问题
; WITH A AS
    (select distinct 
        country,cast(sum(Sessions) over (partition by country) as float) / cast(sum(sessions) over() as float) as sess_prcnt
    from 
        GoogleAnalytics.dbo.SiteVisitsLog
    )
SELECT *,rank() OVER (order by sess_prct DESC) AS rnk
FROM A
order by 
    sess_prcnt desc

或类似的将其用作FROM子句的一部分

SELECT *,rank() OVER (order by sess_prct DESC) AS rnk
FROM 
    (select distinct 
        country,cast(sum(Sessions) over (partition by country) as float) / cast(sum(sessions) over() as float) as sess_prcnt
    from 
        GoogleAnalytics.dbo.SiteVisitsLog
    ) A
order by 
    sess_prcnt desc

您可能还想确保对任务使用适当的排名功能-ROW_NUMBER,RANK,or DENSE_RANK