Hive 配置单元-如何为每个匹配选择前N个元素 请考虑以下表格中的蜂巢表。
当我们想要获得与where子句中的条件匹配的所有行时,这种基本SQL语法可以很好地工作。对于where子句的每个匹配项,我想将返回的行限制为一个数字,比如N 让我举例说明: 一, 考虑这个表:Hive 配置单元-如何为每个匹配选择前N个元素 请考虑以下表格中的蜂巢表。,hive,hiveql,Hive,Hiveql,当我们想要获得与where子句中的条件匹配的所有行时,这种基本SQL语法可以很好地工作。对于where子句的每个匹配项,我想将返回的行限制为一个数字,比如N 让我举例说明: 一, 考虑这个表: TableA c1 c2 1. a 1 b 1 c 2. d 2. e 2. f 2考虑此查询: SELECT c1, c2 FROM TableA WHERE c1 in (1,2) 3正如你所想象的,它会产生这样的结果: Actual Results: c1 c2 1.
TableA
c1 c2
1. a
1 b
1 c
2. d
2. e
2. f
2考虑此查询:
SELECT c1, c2
FROM TableA
WHERE c1 in (1,2)
3正如你所想象的,它会产生这样的结果:
Actual Results:
c1 c2
1. a
1 b
1 c
2. d
2. e
2. f
四,
预期结果:
c1 c2
1. a
1 b
2. d
2. e
问题:如何修改2中的查询以获得4中提到的所需输出。对于c1,只有2个值
SELECT c1, c2 FROM TableA WHERE c1 = 1 ORDER BY c2 LIMIT 2
UNION ALL
SELECT c1, c2 FROM TableA WHERE c1 = 2 ORDER BY c2 LIMIT 2
超过2个值,请使用秩
c1只有2个值
SELECT c1, c2 FROM TableA WHERE c1 = 1 ORDER BY c2 LIMIT 2
UNION ALL
SELECT c1, c2 FROM TableA WHERE c1 = 2 ORDER BY c2 LIMIT 2
超过2个值,请使用秩
您可以使用row_number函数来执行此操作
select c1,c2
from (SELECT c1, c2, row_number() over(partition by c1 order by c2) as rnum
FROM TableA
--add a where clause as needed
) t
where rnum <= 2
您可以使用row_number函数来执行此操作
select c1,c2
from (SELECT c1, c2, row_number() over(partition by c1 order by c2) as rnum
FROM TableA
--add a where clause as needed
) t
where rnum <= 2