如何在hive中的having中使用and“in”子句?

n8ghc7c1  于 2021-05-29  发布在  Hadoop
关注(0)|答案(2)|浏览(584)

我把数据放在这样的表格里:

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

我想得到所有独特的 col1 以及 col2 包含某些列col3的。例如,包含“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中表达这一点?谢谢您。

i2loujxw

i2loujxw1#

我认为下面提到的问题将对你的问题有用。

select col1,col2
from Abc
group by col1,col2
having count(col1) >1 AND COUNT(COL2)>2
luaexgnf

luaexgnf2#

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

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)

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

相关问题