【问题标题】:Compare rows in group with specific value postgresql将组中的行与特定值 postgresql 进行比较
【发布时间】:2021-02-25 14:53:02
【问题描述】:

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

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

部分状态名称 1 5个 1 6个 1 9 b 2 4 摄氏度 2 5天 2 9天 2 10天 3 5 e 3 10 元

期望的输出

Section equalnames
1      no
2      yes
3      null/flag

【问题讨论】:

    标签: sql postgresql compare pgadmin


    【解决方案1】:

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

    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 对吗?
    • 列名不是真正的组
    • 天哪,最后一个成功了。非常感谢戈登。但是这个最小值和最大值有什么作用呢??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2017-10-23
    • 1970-01-01
    • 2021-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多