簡體   English   中英

是否可以通過 T-SQL 中另一個窗口函數的結果對數據集進行排名?

[英]Is it possible to rank a dataset by the result of another window function in 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 或 DENSE_RANK

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM