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

Bagaimana Menangani Pembagian dengan Nol Dalam SQL

Masalah:

Anda ingin melakukan pembagian dalam kueri SQL Anda, tetapi penyebutnya adalah ekspresi yang bisa menjadi nol. Basis data akan memberi Anda kesalahan saat penyebut sebenarnya nol.

Contoh:

Basis data kami memiliki tabel bernama investor_data dengan data pada kolom berikut:id , investor_year , price_per_share , income , dan expenses .

id investor_year price_per_share penghasilan pengeluaran
1 2016 20 3200 2300
2 2017 130 2000 2000
3 2018 40 200 100
4 2019 15 5900 4900

Mari kita bagi harga per saham dengan selisih antara pendapatan dan pengeluaran untuk menentukan rasio P/E (rasio harga-pendapatan) untuk setiap tahun. Perhatikan bahwa ada kasus ketika pendapatan sama dengan pengeluaran, sehingga perbedaannya akan menjadi nol. Jadi, kita perlu menemukan cara untuk menghindari pembagian dengan nol.

Solusi:

SELECT investor_year,
  price_per_share/NULLIF(income-expenses, 0)  AS P_E_ratio
FROM investor data;

Kueri ini mengembalikan rasio P/E untuk setiap tahun seperti yang dijelaskan dalam pernyataan masalah:

investor_year P_E_ratio
2016 0.0222
2017 NULL
2018 0,4000
2019 0,0150

Jika perbedaan antara pendapatan dan pengeluaran adalah nol (seperti yang terjadi pada tahun 2017), NULLIF fungsi mengubah nol menjadi nilai NULL. Oleh karena itu, pembagian dengan nol memberikan hasil NULL.

Diskusi:

Jika Anda ingin menangani pembagian dengan nol dengan baik, Anda dapat menggunakan NULLIF fungsi. NULLIF membutuhkan dua argumen:ekspresi minat, dan nilai yang ingin Anda timpa. Jika argumen pertama sama dengan argumen kedua, maka NULLIF mengembalikan NULL; jika tidak, ia mengembalikan argumen pertama.

Anda dapat menggunakan fungsi ini untuk menangani pembagian potensial dengan nol dengan membungkus penyebut dalam panggilan ke NULLIF . Dalam contoh kita, jika perbedaan antara pendapatan dan pengeluaran adalah nol, nilai ini akan diubah menjadi NULL, dan penyebut dalam pembagian akan menjadi NULL, bukan nol.

Solusi 2:Gunakan WHERE

Tentu saja, dalam beberapa situasi, Anda dapat menggunakan solusi yang lebih sederhana:Hindari pembagian dengan nol dengan menggunakan WHERE dengan operator pembanding <>. Dalam contoh kita, kita dapat memeriksa apakah pendapatan-pengeluaran berbeda dari 0. Jika ya, perhitungan akan dikembalikan.

SELECT investor_year,
  price_per_share/(income-expenses) AS P_E_ratio
FROM investor data
WHERE (income-expenses) <> 0 ;

Perhatikan bahwa dengan WHERE solusi, Anda akan mendapatkan lebih sedikit baris daripada yang ada di investor_date meja. Baris di mana pendapatan dan pengeluaran sama tidak akan ditampilkan di hasil akhir.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL DAN Operator untuk Pemula

  2. Menggunakan Lacak Kausalitas untuk Memahami Eksekusi Kueri

  3. Mitos bahwa DROP dan TRUNCATE TABLE adalah Non-Logged

  4. Bekerja dengan JavaFX UI dan Aplikasi JDBC

  5. Merancang Database untuk Sistem Rekrutmen