限制列值重复到前 2

Limit column value repeats to top 2

所以我有这个查询:

SELECT 
    Search.USER_ID,
    Search.SEARCH_TERM,
    COUNT(*) AS Search.count
FROM Search

GROUP BY 1,2
ORDER BY 3 DESC

其中 returns 看起来像这样的响应:

USER_ID   SEARCH_TERM    count
bob       dog            50
bob       cat            45
sally     cat            38
john      mouse          30
sally     turtle         10
sally     lion           5
john      zebra          3
john      leopard        1

我的问题是:如何更改查询,使其仅 returns 任何给定用户搜索最多的前 2 个字词?所以在上面的例子中,Sally 的最后一行将被删除,John 的最后一行也将被删除,总共留下 6 行;每个用户 2 个,如下所示:

USER_ID   SEARCH_TERM    count
bob       dog            50
bob       cat            45
sally     cat            38
john      mouse          30
sally     turtle         10
john      zebra          3

在SQL服务器中,可以把原来的查询放到一个CTE中,添加ROW_NUMBER()函数。然后在新的主查询中,只需添加一个 WHERE 子句来限制行号。您的查询看起来像这样:

;WITH OriginalQuery AS
(
    SELECT 
        s.[User_id]
        ,s.Search_Term
        ,COUNT(*) AS 'count'
        ,ROW_NUMBER() OVER (PARTITION BY s.[USER_ID] ORDER BY COUNT(*) DESC) AS rn
    FROM Search s
    GROUP BY s.[User_id], s.Search_Term
)
SELECT oq.User_id
      ,oq.Search_Term
      ,oq.count
FROM OriginalQuery oq
WHERE rn <= 2
ORDER BY oq.count DESC 

编辑:我指定 SQL 服务器作为我在这里使用的 dbms,但上面应该符合 ANSI 标准并在 Snowflake 中工作。