将组中的行与特定值 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;
编辑:当 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;