Hive SQL - 选择包含值的所有行;其中一行与特定值匹配

  • 本文关键字:一行 包含值 选择 SQL Hive sql hive
  • 更新时间 :
  • 英文 :


我有一个这样的蜂巢表-

Name     ..... Page
Sid ...........Login
Sid ...........Buy 
Nancy ......Home
Nancy ......Register
Nancy ......Buy

我想提取名称的所有行,其中一个名称具有页面=登录。因此,它将为 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.

谁能帮忙?这个查询似乎很简单。谢谢

以下查询适用于任何支持 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显示为页面的次数,然后仅保留符合条件的名称。

您可以使用窗口函数执行此操作:

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;

看看这个: https://cwiki.apache.org/confluence/display/Hive/LanguageManual+SubQueries#LanguageManualSubQueries-SubqueriesintheWHEREClause 这是 Hive SQL 子查询的教程

相关内容

最新更新