sql - 限制列值重复到顶部 2
问题描述
所以我有这个查询:
SELECT
Search.USER_ID,
Search.SEARCH_TERM,
COUNT(*) AS Search.count
FROM Search
GROUP BY 1,2
ORDER BY 3 DESC
它返回如下所示的响应:
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
我的问题是:我将如何更改查询,以便它只返回任何给定用户的前 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 Server 中,您可以将原始查询放入一个 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 Server 指定为我在这里使用的 dbms,但以上内容应符合 ANSI 并在 Snowflake 中工作。
推荐阅读
- css - 更改伪元素的比例会稍微移动父元素
- character-encoding - PHPMailer没有正确设置标题中的字符集
- node.js - 将ssl添加到rest api
- r-markdown - Bookdown 中的 TikZ 库
- visual-studio-code - 由于缺少 /dev/fd/3,VS-Code 无法启动
- javascript - 如何通过 discord.js 发布到新的 NewsChannel
- hibernate - JPA 属性引用由复杂查询支持(创建)的实体
- javascript - Javascript 等到本地化资源从服务器中提取出来
- python - 为什么问题的结果是在列表的位置 1 而不是 0
- xpath - 对原子值进行排序的 XPath 查询的语法是什么?