sql >> Databasteknik >  >> RDS >> PostgreSQL

PostgreSQL skapa en ny kolumn med värden villkorade på andra kolumner

Engångsoperationen kan uppnås med en vanlig UPDATE :

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

Jag skulle råda dig att inte använda kamelfodral, blanksteg och parenteser i dina namn. Även om det är tillåtet mellan dubbla citattecken, leder det ofta till komplikationer och förvirring. Tänk på kapitlet om identifierare och nyckel ord i manualen .

Är du medveten om att du kan exportera resultaten av en fråga som CSV med COPY ?
Exempel:

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

Du skulle inte behöva den redundanta kolumnen på det här sättet till att börja med.

Ytterligare svar på kommentaren

För att undvika tomma uppdateringar:

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

Personligen skulle jag bara lägga till sådana överflödiga kolumner om jag hade en övertygande anledning. Normalt skulle jag inte göra det. Om det handlar om prestanda:är du medveten om index på uttryck och partiella index a> ?



  1. Hur man förbättrar frågeprestanda i Django adminsökning på relaterade fält (MySQL)

  2. Hur NOT LIKE fungerar i MariaDB

  3. hur man förhindrar det här felet:Varning:mysql_fetch_assoc() förväntar sig att parameter 1 är resurs, boolean ges i ... på rad 11

  4. Hur inaktiverar man kolumnstatistik i MySQL 8 permanent?