PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana saya bisa membuat kolom di postgres dari nilai dan pilihan berdasarkan kolom lain?

Catatan penting:Saya akan membuat tampilan berdasarkan tabel Anda saat ini dan menghindari penambahan kolom baru, karena akan mendenormalisasi skema Anda. Baca selengkapnya di sini .

Juga, saya akan menggunakan nama huruf kecil untuk semua pengenal untuk menghindari qouting.

  • untuk membentuk GPA_TXT Anda dapat menggunakan to_char() fungsi:to_char(gpa, 'FM09.0') (FM akan menghindari spasi di depan string yang dihasilkan);
  • untuk kolom kedua, saya akan menggunakan GPA dan bukan GPA_TXT untuk perbandingan numerik. Anda dapat memeriksa lebih lanjut di CASE buat di dokumen , tetapi bloknya mungkin sebagai berikut:

    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
    

Maaf, saya tidak tahu bagaimana nilai ditetapkan per IPK, harap sesuaikan.

Kueri yang dihasilkan untuk tampilan mungkin (juga di 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;

Untuk membuat tampilan, cukup tambahkan CREATE VIEW aview AS sebelum kueri ini.

EDIT

Jika Anda masih ingin menambahkan kolom, berikut ini triknya:

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. Bagaimana saya bisa menghentikan skrip Postgres ketika menemukan kesalahan?

  2. 'otentikasi kata sandi gagal untuk postgres pengguna'

  3. File Soket /var/pgsql_socket/.s.PGSQL.5432 Hilang Di Mountain Lion (OS X Server)

  4. Memeriksa keberadaan indeks di PostgreSQL

  5. rails - kesalahan postgres:Alasan:Versi perpustakaan tidak kompatibel:libpq.5.dylib membutuhkan versi 1.0.0 atau lebih baru,