PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

PostgreSQL crea una nuova colonna con valori condizionati su altre colonne

L'operazione una tantum può essere ottenuta con un semplice UPDATE :

UPDATE tbl
SET    one_year_survival = (survival OR survival_days >= 365);

Consiglierei di non usare camel-case, white-space e parentesi nei tuoi nomi. Sebbene consentito tra virgolette doppie, spesso porta a complicazioni e confusione. Considera il capitolo su identificatori e chiave parole nel manuale .

Sei consapevole che puoi esportare i risultati di una query come CSV con COPY ?
Esempio:

COPY (SELECT *, (survival OR survival_days >= 365) AS one_year_survival FROM tbl)
TO '/path/to/file.csv';

Tanto per cominciare, non avresti bisogno della colonna ridondante.

Risposta aggiuntiva al commento

Per evitare aggiornamenti vuoti:

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)
...

Personalmente, aggiungerei tali colonne ridondanti solo se avessi una ragione convincente. Normalmente non lo farei. Se si tratta di prestazioni:sei a conoscenza di indici su espressioni e indici parziali ?