1

我需要构造一个满足以下条件的查询:

  • 选择 X 列和 MAX(column1),按 X 列分组
  • 如果 column1 包含负值(在给定组中只能是一个),则显示 'reset' 而不是 MAX(column1)

我知道我可以通过在分组之前使用 case 并用非常大的数字替换负值然后在分组后使用 case 来做到这一点,但这是一个非常混乱的解决方案。

有没有人有更好的想法如何解决这个问题?

4

1 回答 1

3

您还可以选择最小值并检查是否为负值。
类似于以下内容:

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
于 2013-05-13T13:58:12.063 回答