1

我正在 Athena 中尝试仅输出具有某些特定值但不是在所有行中的用户

假设我有下表。我希望所有用户至少在他们的一行中具有值“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。

那些解决方案太复杂了?有人知道如何实现它们,或者有人有更好更简单的解决方案吗?

4

3 回答 3

0

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

SELECT DISTINCT user
FROM some_table
WHERE value = 100

但是我假设您毕竟是用户和值的元组,其中用户至少有一个值为 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)
于 2020-06-17T08:47:53.657 回答
0

如果你只想要用户,我会去聚合:

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

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

having max(value) = 100
于 2020-06-17T11:44:43.583 回答
0

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

SELECT * FROM your_table
WHERE User IN(
    SELECT DISTINCT User
    FROM your_table
    WHERE Value = 100
)
于 2020-06-17T08:48:02.913 回答