簡體   English   中英

計算訪問者排名在一個頁面上高於另一個頁面的情況

[英]Count number of cases where visitor rank is higher on one page then on another

我想計算在/page_y中的排名高於在page_x中排名的數字fullvisitorID 所以在這種情況下,結果將是 1,只有111

全訪問者 ID
111 1 /page_x
111 2 /page_y
222 1 /page_x
222 2 /page_x
333 2 /page_x
333 1 /page_y

考慮以下方法

select count(*) from (
  select distinct fullvisitorID
  from your_table
  qualify max(if(page='/page_y',rank,null)) over win > max(if(page='/page_x',rank,null)) over win
  window win as (partition by fullvisitorID)
)

對於計數,您可以使用COUNTGROUP BY

SELECT fullvisitorID, COUNT(fullvisitorID), Page FROM table t1
WHERE rank = (SELECT MAX(t2.rank) FROM table t2 WHERE t2.fullvisitorID = t1.fullvisitorID)
Group By fullvisitorID, Page 

您可以通過匹配“ fullvisitorID ”字段在兩個表之間應用SELF JOIN ,然后強制

  • 第一個具有“ page_y ”值的表
  • 第二個表有“ page_x ”值
  • 第一個表的排名具有第二個表的更高排名
SELECT *
FROM       tab t1
INNER JOIN tab t2
        ON t1.fullvisitorID = t2.fullvisitorID
       AND t1.page = '/page_y'
       AND t2.page = '/page_x'
       AND t1.rank > t2.rank

表分離方法:

DECLARE @t1 TABLE ( fullvisitorID INT, [rank] INTEGER,[page] VARCHAR (max)) --here where page = x
DECLARE @t2 TABLE ( fullvisitorID INT, [rank] INTEGER,[page] VARCHAR (max)) --here where page = y 
INSERT INTO @t1 SELECT * FROM @test t WHERE t.[page] LIKE '/page_x'
 INSERT INTO @t2 SELECT * FROM @test t WHERE t.[page] LIKE '/page_y'
          
SELECT COUNT(*) FROM @t1 INNER JOIN @t2 ON [@t1].fullvisitorID = [@t2].fullvisitorID WHERE [@t1].rank < [@t2].rank
SELECT COUNTIF(page = '/page_y') cnt FROM ( SELECT * FROM sample_table WHERE page IN ('/page_x', '/page_y') QUALIFY ROW_NUMBER() OVER (PARTITION BY fullvisitorID ORDER BY rank DESC) = 1 );

暫無
暫無

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

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