我有这样的数据表:

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/

10-13 03:28