我有这样的数据表:
col1 col2 col3
A B 3
A B 1
A B 2
C B 1
我想获取包含col3某些行的
col1
和col2
的所有唯一组。像,所有包含“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/