将组中的行与特定值 postgresql 进行比较

Compare rows in group with specific value postgresql

编辑:当 5 或 9 不存在时,我需要一个空值(或另一个标志)

我有 3 列。部分、状态和名称。在一个 SECTION 中最多有 10 行(STATUS 1 到 10)。我必须在一个 SECTION 中比较 STATUS 5 和 9 的 NAME 值。然后指出这 2 个名称(对于状态 5 和 9)对于每个部分是否相同。

栏目状态名称 1 5 一个 1 6 一个 1 9 乙 2 4 摄氏度 2 5 天 2 9 天 2 10 天 3 5 电子 3 10 e

期望的输出

Section equalnames
1      no
2      yes
3      null/flag

我会使用布尔值而不是字符串,并且只使用带过滤的聚合:

select group, min(name) = max(name) as names_equal_flag
from t
where status in (5, 9)
group by group;

请注意,group 是一个非常糟糕的列名称,因为它是一个 SQL 关键字。我假设您在实际数据中有更合适的名称。

如果你想要一个字符串,你可以使用case:

select group,
       (case when min(name) = max(name) then 'yes' else 'no' end) as names_equal_flag
from t
where status in (5, 9)
group by group;