sql >> Databáze >  >> RDS >> PostgreSQL

PostgreSQL vytvoří nový sloupec s hodnotami podmíněnými jinými sloupci

Jednorázovou operaci lze provést jednoduchým UPDATE :

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

Doporučuji nepoužívat ve jménech velká písmena, mezery a závorky. I když je to povoleno mezi dvojitými uvozovkami, často to vede ke komplikacím a zmatkům. Zvažte kapitolu o identifikátorech a klíčích slova v příručce .

Jste si vědomi toho, že můžete exportovat výsledky dotazu? jako CSV s COPY ?
Příklad:

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

Tímto způsobem byste pro začátek nepotřebovali redundantní sloupec.

Další odpověď na komentář

Chcete-li se vyhnout prázdným aktualizacím:

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

Osobně bych takové nadbytečné sloupečky přidal jen v případě, že bych měl pádný důvod. Normálně bych ne. Pokud jde o výkon:víte o indexech výrazů a částečných indexů ?



  1. SQL dotaz pro načtení OrderID, TransactionID, Status na základě stavu transakce, což je Char

  2. Jak vybrat jeden záznam v levém spojení

  3. Jak odstranit jeden soubor z úložiště médií?

  4. klient nepodporuje ověřovací protokol požadovaný serverem, zvažte upgrade klienta mysql