我遇到一种情况,需要使用 DISTINCT 来获取唯一值。但还有附加条件。在重复的行中,我得到一些值为 SUCCESS,一些值为 FAILURE。我需要它,以便在 DISTINCT 结果中,如果任何重复项有 FAILURE,则 DISTINCT 结果将失败,否则将是 SUCCESS。我该如何实现这一点?
SELECT DISTINCT COL1, COL2, COL3, Result (
Select COL1, COL2, COL3, CASE WHEN resolved THEN 'SUCCESS' ELSE 'FAILURE' END as Result FROM table
UNION
// Some other queries with similar results
)
您可以通过以下方式实现
GROUP BY
:您可以直接计算“失败”。
查看示例
您可以使用该
distinct on
子句并根据布尔值对结果进行排序数据库小提琴
GROUP BY
和的组合BOOL_AND
可用于实现所述结果。result
如果全部resolved
都是,则以下查询在 中返回“SUCCESS”TRUE
;否则,在 中返回“FAILURE”result
(这与 OP 的原始查询一致):这种方法可以避免重复映射
resolved
到文本值的逻辑,当原始值来自多个来源(例如UNION
OP 的示例查询中的 s)时,它可以简化维护。以下查询将其视为
resolved IS NULL
未知而不是失败:FALSE
如果有的话,总数resolved
就是FALSE
,但只有TRUE
当所有都是时resolved
才会是TRUE
。