sql - 如何在 HIVE 中使用 "in"和 "having"子句?

标签 sql sqlite hadoop hive

我的数据是这样的:

col1    col2    col3   
A       B       3
A       B       1
A       B       2
C       B       1

我想获取所有包含 col3 某些行的 col1col2 的唯一组。比如,所有包含“2”的 col1 和 col2 组。

我想做这样的事情:

select col1, col2 from sometable 
group by col1, col2
having col3=1 and col3=2

但我希望它只返回在 col3 中同时具有 1 和 2 实例的组。所以,查询后的结果应该是这样的:

   col1    col2
   A       B

我如何在 HIVE 中表达它?谢谢。

最佳答案

我不知道为什么其他人删除了正确然后几乎正确的答案,但我会备份他们的答案。

SELECT col1, col2, COUNT(DISTINCT col3)
FROM
    sometable
WHERE
    col3 IN (1,2)
GROUP BY col1, col2
HAVING
    COUNT(DISTINCT col3) > 1

如果您真的想返回所有符合条件的记录,您需要进行子选择并返回主表以获取它们。

SELECT s.*
FROM
    sometable s
    INNER JOIN (
       SELECT col1, col2, COUNT(DISTINCT col3)
       FROM
          sometable
       WHERE
          col3 IN (1,2)
       GROUP BY col1, col2
       HAVING
          COUNT(DISTINCT col3) > 1
    ) t
    ON s.Col1 = t.Col1
    AND s.Col2 = t.Col2
    AND s.col3 IN (1,2)

要点是将您的行集缩小/过滤为您要测试的行 col3 IN (1,2) 然后计算 col3 的 DISTINCT 值以确保 1 和 2 都存在而不仅仅是 1 & 1 或 2 & 2。

关于sql - 如何在 HIVE 中使用 "in"和 "having"子句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38961921/

相关文章:

mysql - 在 MySQL 中计算平均意见得分 (MOS)

sql - View 是否自动更新

mysql - pgloader 未将数据从 MySQL 导入到 Postgres

iphone - 如何使用 NSMutableArray 中的列名列表在 sqlite3 中创建表

hadoop - 哪个版本的sqoop兼容hadoop 3.0

hadoop - 将输入文件关联到输出文件

php - 使用 JOIN 和 LIMIT 查询两个表

ruby-on-rails - 如何防止创建 development.sqlite3 文件?

database - 如何引用其他表? (SQLite)

hadoop - 将变量传递给oozie case部分不起作用