PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как мога да създам колона в postgres от стойности и селекции въз основа на други колони?

Важна забележка:бих създал изглед въз основа на текущата ви таблица и избягвайте добавянето на нови колони, тъй като те ще денормализират вашата схема. Прочетете повече тук .

Освен това ще използвам имена с малки букви за всички идентификатори, за да избегна qouting.

  • за формиране на GPA_TXT поле можете да използвате to_char() функция:to_char(gpa, 'FM09.0') (FM ще избегне интервал пред резултантния низ);
  • за второто поле бих използвал GPA а не GPA_TXT за цифрово сравнение. Можете да проверите повече на CASE конструкция в документите , но блокът може да е следният:

    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
    

Съжалявам, не знам как се дават оценки за GPA, моля, коригирайте съответно.

Получената заявка за изгледа може да бъде (също на 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;

За да създадете изглед, просто добавете CREATE VIEW aview AS преди тази заявка.

РЕДАКТИРАНЕ

Ако все пак искате да добавите колони, следното трябва да свърши работа:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Внедряване на настройка с множество центрове за данни за PostgreSQL - част втора

  2. Postgresql UUID, поддържан от Hibernate?

  3. Как да търся диапазон от цели числа в PostgreSQL?

  4. Възстановете отдалечен дъмп към RDS

  5. PostgreSQL преобразуващ масив, върнат от функция в колони