我需要构造一个满足以下条件的查询:
- 选择 X 列和 MAX(column1),按 X 列分组
- 如果 column1 包含负值(在给定组中只能是一个),则显示 'reset' 而不是 MAX(column1)
我知道我可以通过在分组之前使用 case 并用非常大的数字替换负值然后在分组后使用 case 来做到这一点,但这是一个非常混乱的解决方案。
有没有人有更好的想法如何解决这个问题?
您还可以选择最小值并检查是否为负值。
类似于以下内容:
select foo, case when min_value < 0 then 'reset' else to_char(max_value) end
from
(
select foo, max(column1) as max_value, min(column1) as min_value
from your_table
group by foo
)
或者,没有子查询:
select foo, case when min(column1) < 0 then 'reset' else to_char(max(column1)) end
from your_table
group by foo