PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

PostgreSQL cria uma nova coluna com valores condicionados em outras colunas


A operação única pode ser alcançada com um simples UPDATE :
UPDATE tbl
SET    one_year_survival = (survival OR survival_days >= 365);

Eu aconselharia a não usar camel-case, white-space e parênteses em seus nomes. Embora permitido entre aspas duplas, muitas vezes leva a complicações e confusão. Considere o capítulo sobre identificadores e chave palavras no manual .

Você sabe que pode exportar os resultados de uma consulta como CSV com COPY ?
Exemplo:
COPY (SELECT *, (survival OR survival_days >= 365) AS one_year_survival FROM tbl)
TO '/path/to/file.csv';

Você não precisaria da coluna redundante dessa maneira para começar.

Resposta adicional ao comentário


Para evitar atualizações vazias:
UPDATE tbl
SET    "Dead after 1-yr" = (dead AND my_survival_col < 365)
      ,"Dead after 2-yrs" = (dead AND my_survival_col < 730)
....
WHERE  "Dead after 1-yr" IS DISTINCT FROM (dead AND my_survival_col < 365)
   OR  "Dead after 2-yrs" IS DISTINCT FROM (dead AND my_survival_col < 730)
...

Pessoalmente, eu só adicionaria essas colunas redundantes se tivesse um motivo convincente. Normalmente eu não faria. Se for sobre desempenho:você conhece os índices em expressões e índices parciais ?