Database
 sql >> Baza danych >  >> RDS >> Database

Jak obsługiwać dzielenie przez zero w SQL?

Problem:

Chcesz wykonać dzielenie w zapytaniu SQL, ale mianownik to wyrażenie, które może wynosić zero. Baza danych wyświetli błąd, gdy w rzeczywistości mianownik będzie wynosił zero.

Przykład:

Nasza baza danych zawiera tabelę o nazwie investor_data z danymi w następujących kolumnach:id , investor_year , price_per_share , income i expenses .

id rok_inwestora price_per_share dochód wydatki
1 2016 20 3200 2300
2 2017 130 2000 2000
3 2018 40 200 100
4 2019 15 5900 4900

Podzielmy cenę za akcję przez różnicę między przychodami a wydatkami, aby określić wskaźnik P/E (wskaźnik cena-zysk) dla każdego roku. Zauważ, że zdarzają się przypadki, gdy dochód równa się wydatkom, więc ich różnica będzie równa zeru. Dlatego musimy znaleźć sposób na uniknięcie dzielenia przez zero.

Rozwiązanie:

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

To zapytanie zwraca wskaźnik P/E dla każdego roku, jak opisano w opisie problemu:

rok_inwestora P_E_ratio
2016 0,0222
2017 NULL
2018 0.4000
2019 0.0150

Jeśli różnica między przychodami a wydatkami wynosi zero (jak w przypadku 2017), NULLIF funkcja zmienia zero na wartość NULL. Dlatego dzielenie przez zero daje wynik NULL.

Dyskusja:

Jeśli chcesz zgrabnie obsługiwać dzielenie przez zero, możesz użyć NULLIF funkcjonować. NULLIF przyjmuje dwa argumenty:wyrażenie zainteresowania i wartość, którą chcesz zastąpić. Jeśli pierwszy argument jest równy drugiemu, to NULLIF zwraca NULL; w przeciwnym razie zwraca pierwszy argument.

Możesz użyć tej funkcji do obsługi potencjalnego dzielenia przez zero poprzez zawinięcie mianownika w wywołaniu NULLIF . W naszym przykładzie, jeśli różnica między przychodami a wydatkami wynosi zero, ta wartość zostanie zmieniona na NULL, a mianownik w dzieleniu będzie NULL, a nie zero.

Rozwiązanie 2:Użyj WHERE

Oczywiście w niektórych sytuacjach możesz użyć prostszego rozwiązania:po prostu unikaj dzielenia przez zero, używając WHERE z operatorem porównania <>. W naszym przykładzie możemy sprawdzić, czy dochód-wydatki są różne od 0. Jeśli tak, obliczenia zostaną zwrócone.

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

Zauważ, że z WHERE rozwiązanie, otrzymasz mniej wierszy niż w investor_date stół. Wiersze, w których przychody i wydatki są równe, nie zostaną pokazane w wyniku końcowym.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak zamienić część ciągu w SQL?

  2. Najlepsze praktyki dotyczące wielojęzycznego projektowania baz danych

  3. Przywracanie kopii zapasowej bazy danych w OpenCart 1.5

  4. Jak usunąć kolumnę w SQL?

  5. Różnica między ograniczeniami w linii i poza linią