我的数据是这样的:
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/