Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

Bagaimana Menulis Pernyataan KASUS dalam SQL

Masalah:

Anda ingin menggunakan pernyataan CASE dalam SQL.

Contoh:

Anda memiliki hasil ujian di exam meja. Anda perlu menetapkan setiap hasil ke salah satu nilai teks berikut:'bad result' , 'average result' , atau 'good result' . Hasil buruk adalah yang di bawah 40, hasil yang baik adalah yang di atas 70, dan sisanya adalah hasil rata-rata.

exam tabel terlihat seperti ini:

nama hasil
Toby Shaw 56
Casey Watson 49
Bennie Lynn 23
Sloan Jalur 70
Steff Fox 85
Daerah Reggie 40
Gail Kennedy 66
Brice Mueller 90

Solusi 1:

SELECT
  name,
  result,
  CASE
    WHEN result < 40 THEN 'bad result'
    WHEN result > 70 THEN 'good result'
    ELSE 'average result'
  END AS category
FROM exam;

Tabel hasil terlihat seperti ini:

nama hasil kategori
Toby Shaw 56 hasil rata-rata
Casey Watson 49 hasil rata-rata
Bennie Lynn 23 hasil buruk
Sloan Jalur 70 hasil rata-rata
Steff Fox 85 hasil bagus
Daerah Reggie 40 hasil rata-rata
Gail Kennedy 66 hasil rata-rata
Brice Mueller 90 hasil bagus

Diskusi:

Untuk menampilkan nilai berdasarkan kondisi spesifik Anda, Anda perlu menulis CASE penyataan. Sintaksnya adalah:

CASE
  WHEN  THEN ,
  WHEN  THEN ,
  …
  ELSE 
END AS 

Jika condition_1 terpenuhi, maka nilai yang diambil adalah value_1 . Jika tidak, maka database akan memeriksa condition_2 . Jika condition_2 benar, maka nilai yang diambil adalah value_2 . Jika tidak satu pun dari kondisi ini terpenuhi, SQL akan memeriksa kondisi yang tersisa satu per satu secara berurutan hingga salah satu kondisi terpenuhi. Jika tidak ada kondisi yang terpenuhi, value_n ditentukan setelah ELSE diambil.

ELSE bagian adalah opsional. Jika Anda menghilangkannya dan tidak ada kondisi yang terpenuhi, Anda mendapatkan NULL .

Ingatlah untuk END CASE klausa ketika Anda selesai dengan semua kondisi. Tentu saja, seperti kolom apa pun yang Anda buat, Anda dapat mengganti namanya (AS <column_name> ).

Dalam contoh kita, 'bad result' ditetapkan ketika result < 40, and 'good result' ditetapkan ketika result > 70 . Jika tidak satu pun dari kondisi ini terpenuhi, nilainya adalah 'average result' . Juga, untuk memberi nama kolom nilai teks yang baru dibuat, Anda perlu menggunakan alias (AS kategori). Beginilah cara Anda mendapatkan:

  CASE
    WHEN result < 40 THEN 'bad result'
    WHEN result > 70 THEN 'good result'
    ELSE 'average result'
  END AS category

Sejak 'average result' ditugaskan ke hasil antara 40 dan 70 (termasuk), Anda juga dapat menulis ketentuan alih-alih ELSE (lihat Solusi 2 di bawah). Namun, lebih mudah menggunakan ELSE .

Solusi 2:

SELECT
  name,
  result,
  CASE
    WHEN result < 40 THEN 'bad result'
    WHEN result > 70 THEN 'good result'
    WHEN result >= 40 AND result <= 70 THEN 'average result'
  END AS category
FROM exam;

Tabel hasil terlihat seperti ini:

nama hasil kategori
Toby Shaw 56 hasil rata-rata
Casey Watson 49 hasil rata-rata
Bennie Lynn 23 hasil buruk
Sloan Jalur 70 hasil rata-rata
Steff Fox 85 hasil bagus
Daerah Reggie 40 hasil rata-rata
Gail Kennedy 66 hasil rata-rata
Brice Mueller 90 hasil bagus

Diskusi:

Sejak 'average result' ditugaskan ke hasil antara 40 dan 70 (termasuk), Anda dapat menulis ketentuan berikut sebagai ganti ELSE :

WHEN result >= 40 AND result <= 70 THEN 'average result'

Jika Anda tidak menggunakan ELSE dan tidak ingin ada NULL s dalam category kolom, Anda perlu memastikan bahwa Anda menangani semua kemungkinan result nilai-nilai. Jika ada result yang tidak memenuhi salah satu syarat, Anda mendapatkan NULL .

Solusi 3:

SELECT
  name,
  result,
  CASE
    WHEN result < 40 THEN 'bad result'
    WHEN result <= 70 THEN 'average result'
    ELSE 'good result'
  END AS category
FROM exam;

Tabel hasil terlihat seperti ini:

nama hasil kategori
Toby Shaw 56 hasil rata-rata
Casey Watson 49 hasil rata-rata
Bennie Lynn 23 hasil buruk
Sloan Jalur 70 hasil rata-rata
Steff Fox 85 hasil bagus
Daerah Reggie 40 hasil rata-rata
Gail Kennedy 66 hasil rata-rata
Brice Mueller 90 hasil bagus

Diskusi:

Kondisi yang ditentukan dalam CASE dapat tidak tumpang tindih seperti pada solusi sebelumnya atau tumpang tindih seperti pada solusi ini. Kondisi pertama sama seperti sebelumnya – untuk result < 40 , category adalah 'bad result' . Semua hasil di bawah 40 diberi nilai ini pada saat ini dan Anda tidak perlu melakukan apa pun dengannya lagi. Artinya tidak perlu memastikan result >= 40 dalam menentukan kondisi untuk 'average result' – semua hasil kurang dari 40 sudah memiliki nilai 'bad result' ditugaskan. Terakhir, untuk hasil yang tersisa, kategorinya harus 'good result'; ELSE 'good result' mengurusnya. Beginilah cara Anda mendapatkan:

CASE
    WHEN result < 40 THEN 'bad result'
    WHEN result <= 70 THEN 'average result'
    ELSE 'good result'
END AS category

Catatan:Urutan kondisi dalam CASE penting. Jika Anda membalik urutan dua kondisi pertama (yaitu, jika Anda menentukan WHEN result <= 70 THEN 'average result' pertama lalu WHEN result <= 70 THEN 'average result' detik), semua hasil kurang dari atau sama dengan 70 berakhir di 'average result' kategori, tanpa hasil yang ditetapkan ke 'bad result' kategori.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Membuat Kasus untuk BUKAN Pemicu – Bagian 1

  2. Jalankan Skrip SQL di lingkungan Multitenant dengan catcon.pl

  3. Pola Data Referensi:Dapat Diperluas dan Fleksibel

  4. Cara Mengurutkan dalam SQL

  5. Menangani Database SQL Dengan PyQt:Dasar-dasarnya