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

Jak mohu vytvořit sloupec v postgresu z hodnot a výběrů založených na jiných sloupcích?

Důležitá poznámka:Vytvořil bych zobrazení na základě vaší aktuální tabulky a vyhnuli jste se přidávání nových sloupců, protože by denormalizovaly vaše schéma. Další informace zde .

Také budu používat malá jména pro všechny identifikátory, abych se vyhnul qoutování.

  • vytvořit GPA_TXT pole můžete použít to_char() funkce:to_char(gpa, 'FM09.0') (FM předejde mezerám před výsledným řetězcem);
  • pro druhé pole bych použil GPA a ne GPA_TXT pro číselné srovnání. Více se můžete podívat na CASE vytvořit v dokumentech , ale blok může být následující:

    CASE WHEN gpa >= 3.3 THEN 'A'
         WHEN gpa > 2.7 AND gpa < 3.3 THEN 'B'
         WHEN gpa > 0 THEN 'C'
         ELSE 'F' END
    

Omlouvám se, nevím, jak se přidělují známky podle GPA, prosím, upravte to podle toho.

Výsledný dotaz pro zobrazení může být (také na SQL Fiddle ):

SELECT name,major,gpa,
       to_char(gpa, 'FM09.0') AS gpa_txt,
       name||'-'||major||'-Grade'||
  CASE WHEN gpa >= 3.3 THEN 'A'
       WHEN gpa > 2.7 AND gpa < 3.3 THEN 'B'
       WHEN gpa > 0 THEN 'C'
       ELSE 'F' END || '-' || to_char(gpa, 'FM09.0') AS adesc
  FROM atab;

Chcete-li sestavit zobrazení, stačí přidat CREATE VIEW aview AS před tímto dotazem.

UPRAVIT

Pokud stále chcete přidat sloupce, mělo by stačit následující:

ALTER TABLE atab ADD gpa_txt text, ADD adesc text;
UPDATE atab SET
    gpa_txt = to_char(gpa, 'FM09.0'),
    adesc = name||'-'||major||'-Grade'||
      CASE WHEN gpa >= 3.3 THEN 'A'
           WHEN gpa > 2.7 AND gpa < 3.3 THEN 'B'
           WHEN gpa > 0 THEN 'C'
           ELSE 'F' END || '-' || to_char(gpa, 'FM09.0');


  1. Vytvořte databázi v SQLite

  2. Laravel 4 Kaskádové měkké mazání

  3. java.lang.ClassNotFoundException:org.postgresql.Driver, Android

  4. Proč je zde potřeba EXECUTE IMMEDIATE?