sql >> Database >  >> RDS >> PostgreSQL

Hoe kan ik een kolom in postgres maken van waarden en selecties op basis van andere kolommen?

Belangrijke opmerking:ik zou een weergave maken gebaseerd op uw huidige tabel en vermeden om nieuwe kolommen toe te voegen, omdat deze uw schema denormaliseren. Lees hier .

Ik zal ook kleine letters gebruiken voor alle identifiers om qouting te voorkomen.

  • om GPA_TXT te vormen veld dat u kunt gebruiken to_char() functie:to_char(gpa, 'FM09.0') (de FM zal spatie voor de resulterende string vermijden);
  • voor het tweede veld zou ik GPA . gebruiken en niet GPA_TXT voor numerieke vergelijking. U kunt meer bekijken op CASE bouwen in de documenten , maar het blok kan het volgende zijn:

    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
    

Sorry, ik weet niet hoe de cijfers per GPA worden toegekend, pas dienovereenkomstig aan.

De resulterende query voor de weergave kan zijn (ook op 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;

Om een ​​weergave te maken, plaatst u CREATE VIEW aview AS voor deze zoekopdracht.

BEWERKEN

Als je toch kiest voor het toevoegen van kolommen, zou het volgende moeten lukken:

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. ORACLE - Selecteer Tellen op een subquery

  2. Spring Data JPA met Java 8 LocalDateTime

  3. SQL niet gelijk aan () Operator voor beginners

  4. Een inleiding tot Hadoop en Big Data