group by—根据sql或presto athena中某一行的值筛选列

cuxqih21  于 2021-07-26  发布在  Java
关注(0)|答案(3)|浏览(456)

我试图在雅典娜中只输出在其中有特定值的用户,而不是所有的行
假设我有下面的table。我希望所有至少一行中的值为“100”但其他行中的值不同于100的用户。

user | value

A    | 1

B    | 2

A    | 100

D    | 3

A    | 4

C    | 3

C    | 5

D    | 100

所以在这个例子中,我只想得到用户a和d,因为只有他们有100个,没有100个。
我试着按用户分组,并为每个用户创建一个值数组,然后检查数组是否包含100个值,但我无法做到这一点。我还考虑过将行转换为列,然后检查其中一列是否等于100。
这些解决方案太复杂了?有人知道如何实现它们,或者有人有更好更简单的解决方案吗?

j1dl9f46

j1dl9f461#

使用以下sql可以找到至少一个值为100的用户:

SELECT DISTINCT user
FROM some_table
WHERE value = 100

但我假设您在所有user和value的元组之后,其中user至少有一个值为100,这可以通过在稍微复杂的查询中使用上面的查询来实现:

WITH matching_users AS (
  SELECT DISTINCT user
  FROM some_table
  WHERE value = 100
)
SELECT user, value
FROM matching_users
LEFT JOIN some_table USING (user)
htzpubme

htzpubme2#

您可以使用下面的子查询来实现所需的输出=

SELECT * FROM your_table
WHERE User IN(
    SELECT DISTINCT User
    FROM your_table
    WHERE Value = 100
)
nqwrtyyt

nqwrtyyt3#

如果你只需要用户,我会选择聚合:

select user
from t
group by user
having sum(case when value = 100 then 1 else 0 end) > 0;

如果 100 是最大可能值,可简化为:

having max(value) = 100

相关问题