quarta-feira, 13 de agosto de 2014

Como utilizar case no postgresql

No exemplo apresentado abaixo foi criado um novo campo no retorno da consulta que determina o nível crítico dos eventos de queimadas baseado na duração do evento em dias. Note que foram criados quatro níveis e desconsiderados os eventos com apenas um dia de duração.

Consulta:
select duracao, ST_AsGeoJson(ST_Centroid(the_geom), 3),
    case    when duracao = 2 then 'observação'
        when duracao between 3 and 7 then 'atenção'
        when duracao between 8 and 14 then 'alerta'
        when duracao >= 15 then 'alerta máximo'
    end as nivel
from evento_requeima
where data = 20140730 and duracao > 1;

Retorno:
duracao;geojson;nivel
2;"{"type":"Point","coordinates":[-48.333,-22.731]}";"observação"
2;"{"type":"Point","coordinates":[-46.051,-12.259]}";"observação"
2;"{"type":"Point","coordinates":[-44.891,-7.34]}";"observação"
2;"{"type":"Point","coordinates":[-48.133,-8.785]}";"observação"
10;"{"type":"Point","coordinates":[-57.056,-12.548]}";"alerta"

uma nova referencia encontrei em:
https://popsql.com/learn-sql/postgresql/how-to-write-a-case-statement-in-postgresql/