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

Hvordan kan jeg oprette en kolonne i postgres ud fra værdier og valg baseret på andre kolonner?

Vigtig bemærkning:Jeg vil oprette en visning baseret på din nuværende tabel og undgik at tilføje nye kolonner, da de vil denormalisere dit skema. Læs mere her .

Jeg vil også bruge små bogstaver til alle identifikatorer for at undgå qouting.

  • for at danne GPA_TXT felt kan du bruge to_char() funktion:to_char(gpa, 'FM09.0') (FM undgår plads foran den resulterende streng);
  • til det andet felt ville jeg bruge GPA og ikke GPA_TXT til numerisk sammenligning. Du kan tjekke mere på CASE konstruer i dokumenterne , men blokken kan være den følgende:

    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
    

Beklager, jeg ved ikke, hvordan karakterer tildeles pr. GPA. Juster venligst i overensstemmelse hermed.

Den resulterende forespørgsel til visningen kan være (også på 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;

For at bygge en visning skal du blot sætte CREATE VIEW aview AS foran før denne forespørgsel.

REDIGER

Hvis du stadig går efter at tilføje kolonner, burde følgende gøre tricket:

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. Opbevaringsdag og måned (uden år)

  2. Når du udfører en lagret procedure, hvad er fordelen ved at bruge CommandType.StoredProcedure i forhold til at bruge CommandType.Text?

  3. Konverter fra MySQL datetime til et andet format med PHP

  4. MySQL aggregerede funktioner med LEFT JOIN