SQL中除數為0處理情況演示
導讀 | 我們在進行資料統計的時候,經常會遇到求百分比,環比,同比等這些需要除以某個數的情況,而如果除數為0,資料庫是會報錯的。那麼遇到這樣的情況我們怎麼處理呢?下面我們用示例給大家講解一下處理方法。 |
情況一
例如
SELECT A/B FROM TAB
遇到這樣的情況,一般的處理方法是用CASE WHEN來判斷B的值
SELECT CASE WHEN B=0 THEN 0 ELSE A/B END FROM TAB
這樣當B如果是0,我們直接賦一個值,避免A/B參與計算報錯。
情況二
上面是一種常見的情況,但是如果遇到下面這樣的聚合函式呢?
例如
SELECT SUM(A)/COUNT(B) FROM TAB
遇到這樣的情況CASE WHEN 是不能判斷COUNT(B)的值的,因為WHEN後面的條件不能使用聚合函式(語法要求),這個時候我們可以這樣處理
SELECT ISNULL(SUM(A)/NULLIF(COUNT(B),0),0) FROM TAB
其中這裡使用了兩個函式,NULLIF()和ISNULL()
NULLIF函式有兩個引數,定義如下:
NULLIF( expression1 , expression2 )
其作用就是:如果兩個指定的表示式相等,就返回NULL值。
ISNULL函式也有兩個引數,定義如下:
ISNULL( expression1 , expression2 )
其作用是:如果第一個引數的結果為NULL,就返回第二個引數的值。
當COUNT(B)的結果為0時,恰好與第二個給定的引數0相等,這個時候NULLIF函式就會返回NULL,而SUM(A)在除以NULL時結果為NULL,外層使用ISNULL函式再對NULL值進行判斷,這樣最終結果就是0了。
這兩種方法就是我們日常處理除數為0的情況了,一定要記得哦!
原文來自:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69955379/viewspace-2790426/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 在MDX中處理邊界情況
- 動態sql查詢結果多行的處理情況SQL
- 處理表鎖定的情況
- 關於小數中0的處理
- oradebug處理DB hang情況
- Java程式異常處理的特殊情況Java
- php倒數計時出現-0的情況PHP
- 在Struts中如何處理ActionForm中包含日期型別屬性的情況ORM型別
- xcodebuild -workspace 情況下,部分坑的處理XCodeUI
- 如何處理瀏覽器的斷網情況?瀏覽器
- session儲存資料庫中以及禁用cookie情況下的處理Session資料庫Cookie
- Java String作為引數的情況Java
- Redo丟失的4種情況及處理方法
- Redo 丟失的4種情況的處理方法
- 解決SQL*Plus中無法正常退格情況SQL
- ash報告中無sql_id的情況SQL
- 哪些情況應該廢標,廢標後如何處理
- oracle 字符集錯誤情況處理簡單方法Oracle
- 沒有備份的情況下處理undo損壞
- Transact-SQL處理小數SQL
- iOS不同網路情況除錯iOS除錯
- js中bool值為false的幾種情況JSFalse
- Oracle 無備份情況下undo檔案損壞處理Oracle
- Laravel-admin 處理 select 有 data 鍵的情況Laravel
- FE.UX-常見CSS邊界情況防禦處理UXCSS
- 在導數為0時極值點仍然難求的情況下用梯度下降法逼近梯度
- 演示中斷處理的例項(例項六)(轉)
- 批處理-刪除環境變數變數
- mybatis sql foreach 引數的傳入的三種情況!!MyBatisSQL
- jmeter問題處理隨筆1 - CSV取值資料異常處理(包含"號,","號的情況)JMeter
- php 處理訊號簡單演示PHP
- Centos中徹底刪除Mysql(rpm、yum安裝的情況)CentOSMySql
- 請教Golang處理Json, 處理的是 List of Json這種情況,大家有何高見?GolangJSON
- sqlserver 針對預處理sql傳入引數的處理方式SQLServer
- 第十八篇:批量處理情況下的回射客戶端客戶端
- undo表空間出現問題的幾種情況與處理
- 沒有備份的情況下如何處理logical & physical corrupt blockBloC
- JavaScript 中的引數處理JavaScript