PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để tạo một cột trong postgres từ các giá trị và lựa chọn dựa trên các cột khác?

Lưu ý quan trọng:Tôi sẽ tạo một chế độ xem dựa trên bảng hiện tại của bạn và tránh thêm các cột mới, vì chúng sẽ không chuẩn hóa lược đồ của bạn. Đọc thêm tại đây .

Ngoài ra, tôi sẽ sử dụng các tên viết thường cho tất cả các số nhận dạng để tránh quá phát.

  • để tạo GPA_TXT trường bạn có thể sử dụng to_char() hàm:to_char(gpa, 'FM09.0') (FM sẽ tránh khoảng trắng phía trước chuỗi kết quả);
  • đối với trường thứ hai, tôi sẽ sử dụng GPA chứ không phải GPA_TXT để so sánh số. Bạn có thể kiểm tra thêm trên CASE xây dựng trong tài liệu , nhưng khối có thể là khối sau:

    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
    

Xin lỗi, tôi không biết cách phân điểm cho mỗi điểm trung bình, vui lòng điều chỉnh cho phù hợp.

Truy vấn kết quả cho chế độ xem có thể là (cũng trên 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;

Để tạo chế độ xem, chỉ cần thêm CREATE VIEW aview AS trước truy vấn này.

CHỈNH SỬA

Nếu bạn vẫn tiếp tục thêm cột, hãy thực hiện theo mẹo sau:

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. PgBouncer 1.7 - “Màu sắc thay đổi sau khi phục sinh”

  2. Tìm các bản ghi duy nhất, được sắp xếp theo trường liên quan, với PostgreSQL và Rails 3?

  3. Tạo chuỗi từ mảng

  4. Cách Tanh () hoạt động trong PostgreSQL

  5. Cách sao chép các lược đồ trong PostgreSQL