Hive / SQL 查询每个键的前 n 个值

Posted

技术标签:

【中文标题】Hive / SQL 查询每个键的前 n 个值【英文标题】:Hive / SQL query for top n values per key 【发布时间】:2018-06-21 17:51:35 【问题描述】:

我想要每个键的前 2 个值。结果如下:

hive 查询应该是什么。

【问题讨论】:

【参考方案1】:

您可以使用 window function 和 OVER() 关闭:

select col1,col2 from (SELECT col1,
col2, 
ROW_NUMBER() OVER (PARTITION BY col1 ORDER BY col2 DESC) AS row_num
FROM data)f
WHERE f.row_num < 3
order by col1,col2

【讨论】:

假设我有另一列 col3,我想显示 col3 的值。所以我正在编写以下代码: select col1,col3,col2 from (SELECT col1,col3, col2, ROW_NUMBER() OVER (PARTITION BY col1,col3 ORDER BY col2 DESC) AS row_num FROM data)f WHERE f.row_num 请分享错误以及您正在使用的表格和版本的示例。 表:创建表数据(Id Serial,col1 VARCHAR(70) NOT NULL,col3 varchar(70),col2 integer,PRIMARY KEY(Id));插入数据(col1,col3,col2)值('a','p','43'),('a','p','11'),('b','q','65 '), ('b','q', '33'), ('c','r', '11'), ('c','r', '22'), ('c', 'r', '33'), ('a','p', '55') ;查询: select col1,col2,col3 from (SELECT col1, col2, col3 ROW_NUMBER() OVER (PARTITION BY col1,col3 ORDER BY col2 DESC) AS row_num FROM data)f WHERE f.row_num 错误:查询错误:错误:ER_PARSE_ERROR:您的 SQL 语法有错误;检查与您的 mysql 服务器版本相对应的手册,以在第 2 行的 '() OVER (PARTITION BY col1,col3 ORDER BY col2 DESC) AS row_num FROM data)f WHERE' 附近使用正确的语法 col3 db-fiddle.com/f/mx2NaLgzvYLvq3gGLkYvZG/0 后面少了一个逗号

以上是关于Hive / SQL 查询每个键的前 n 个值的主要内容,如果未能解决你的问题,请参考以下文章

查询用户出现在表中后的前 48 小时活动 (HiveQL / SQL)

Mysql:按子查询中的最大 N 个值排序

sql查出4个值,shell怎么取出

高效的 SQL 查询或索引来查找所有列是不是只有 1 个值

如何跳过sql查询中的前n行

SQL查询以获取给定键的每个实例的最新行