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

PostgreSQL opret en ny kolonne med værdier betinget af andre kolonner

Engangsoperationen kan opnås med en almindelig UPDATE :

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

Jeg vil råde dig til ikke at bruge kamel-kasse, mellemrum og parentes i dine navne. Selvom det er tilladt mellem dobbelte anførselstegn, fører det ofte til komplikationer og forvirring. Overvej kapitlet om identifikatorer og nøgler ord i manualen .

Er du klar over, at du kan eksportere resultaterne af en forespørgsel som CSV med COPY ?
Eksempel:

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

Du ville ikke have brug for den redundante kolonne på denne måde til at begynde med.

Yderligere svar til kommentar

Sådan undgår du tomme opdateringer:

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

Personligt ville jeg kun tilføje sådanne overflødige kolonner, hvis jeg havde en tvingende grund. Normalt ville jeg ikke. Hvis det handler om ydeevne:er du opmærksom på indekser på udtryk og delvise indekser a> ?



  1. Flere INSERT-sætninger vs. enkelt INSERT med flere VALUES

  2. Henter Oracle alle rækkerne, før de evaluerer rownum?

  3. Oracle omdøbe kolonner fra vælg automatisk?

  4. MySql ::lagret procedure rekursiv