根据条件选择分组值

时间:2013-05-13 13:56:27

标签: sql oracle

我需要构建一个符合以下条件的查询:

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

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

有人知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分: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