我有一个像这样的Hive表 -
Name ..... Page
Sid ...........Login
Sid ...........Buy
Nancy ......Home
Nancy ......Register
Nancy ......Buy
我想提取名称的所有行,其中一个名称有一个Page = login。因此,它将为name = Sid提取两行,但不为name = Nancy提取行。
我试过了 -
select * from table where name in (select name from table where page='login');
然而,我收到了错误 -
Error while compiling statement: FAILED: SemanticException [Error 10249]: Line 1:142 Unsupported SubQuery Expression ''login'': SubQuery expression refers to Outer query expressions only.
有人可以帮忙吗?这个查询看起来很简单。感谢
答案 0 :(得分:0)
以下查询适用于支持ANSI SQL的任何地方:
SELECT t1.*
FROM yourTable t1
INNER JOIN
(
SELECT Name
FROM yourTable
GROUP BY Name
HAVING SUM(CASE WHEN Page = 'login' THEN 1 ELSE 0 END) > 0
) t2
ON t1.Name = t2.Name
基本策略是对每个名称进行聚合,计算login
作为页面显示的次数,然后仅保留符合条件的名称。
答案 1 :(得分:0)
您可以使用窗口功能执行此操作:
select t.*
from (select t.*,
count(case when page = 'login' then 1 else 0 end) over (partition by name) as numlogins
from t
) t
where numlogins > 0;
答案 2 :(得分:-1)