1. 程式人生 > >遇到的問題----sql語句中用sum()函式輸出為null

遇到的問題----sql語句中用sum()函式輸出為null

在SQL語句中使用集合函式count(),返回結果肯定為非負整數,這也是用來判斷資料有無的一個很有效的方法;

然後在用sum()進行集合相加的時候,如果sum()的物件沒有記錄,那麼不會返回0,而返回null,這麼做,不會影響資料庫,因為數值型欄位也是可以存放NULL的,因為在執行這樣的SQL語句的時候,沒有記錄也不會報錯。

但是執行完之後,要使用這個資料就有問題了。

1、在程式裡處理的時候,比如進行四則運算或其他的強型別轉換的時候,就會提供型別不正確或是與其它資料相加得到的結果變成NULL,因為NULL+number= Null。

2、統計的結果的SQL語句中有其它的運算,同1的最後一種情況,Null+ number = Null。就會把其它的有效資料也抹殺掉了。

解決方法:

1、使用isnull()方法進行判斷,如isnull(sum(cnt),0),其中0為預設值,如果sum(cnt)的結果為null,則賦值 0;同理此方法可用於某欄位,isnull(cnt,0),這樣就可以排除一些值為null的數值型欄位了。而如果這樣 isnull(sum(isnull(cnt,0)),0),這樣就可保萬無一失了。

2、使用case when else流程控制語句,如可以用"case when sum(cnt) is null then 0 else sum(cnt) end"來代替sum(cnt),其中0同上一條的意義相同。

另外求平均函式avg() 也是一樣的情況,相同的解決辦法

用isnull函式解決:isnull(sum(刷卡金額),0)

相關推薦

遇到的問題----sql語句中用sum()函式輸出null

在SQL語句中使用集合函式count(),返回結果肯定為非負整數,這也是用來判斷資料有無的一個很有效的方法; 然後在用sum()進行集合相加的時候,如果sum()的物件沒有記錄,那麼不會返回0,而返回null,這麼做,不會影響資料庫,因為數值型欄位也是可以存放NULL的,因為在執行這樣的SQL語句的時候

SQL語句SUM函式返回NULL的解決辦法

SUM 是SQL語句中的標準求和函式,如果沒有符合條件的記錄,那麼SUM函式會返回NULL。 但多數情況下,我們希望如果沒有符合條件記錄的情況下,我們希望它返回0,而不是NULL,那麼我們可以使用例如下面的方法來處理: SELECT COALESCE(SUM(name),0

SQL語句SUM函式

在工作中有兩個sum的求和函式相加的時候如果其中一個是null那麼相加的結果也是null,所以相加之前要用nvl處理下 例如: select sum(a.create_staff) from dp.t_spec_steet a where a.sheet_id=1154查出

關於SQL語句SUM函式返回NULL的解決辦法

在SQL語句中使用集合函式count(),返回結果肯定為非負整數,這也是用來判斷資料有無的一個很有效的方法; 然後在用sum()進行集合相加的時候,如果sum()的物件沒有記錄,那麼不會返回0,而返回null,這麼做,不會影響資料庫,因為數值型欄位也是可以存放NULL的

SUMSQL語句中的標準求和函式,如果沒有符合條件的記錄,那麼SUM函式會返回NULL。但咱們想返回的是0而不是Null

但多數情況下,我們希望如果沒有符合條件記錄的情況下,我們希望它返回0,而不是NULL,那麼我們可以使用例如下面的方法來處理: SELECT COALESCE(SUM(field1),0) FROM ta

[Oracle]高效的SQL語句之分析函式(一)--sum()

select deptno,       ename,       sal,  --按照部門薪水累加(order by改變了分析函式的作用,只工作在當前行和前一行,而不是所有行)sum(sal) over (partition by deptno orderby sal) CumDeptTot,       

Sql語句中用別名作判斷條件

當我們使用某個表示式作為輸出的一列時,我們無法再Where條件中直接使用該列作判斷條件.    例如下面的SQL語句: select id, (c1 + c2) as s from t1 

sql語句字串處理函式

函式 database() 查詢當前所使用的資料庫名 user() 或 current_user() 查詢當前使用者 version() 或 @@version 檢視當前資料庫的版本 文字處理函式 eg: mysql> SELECT LEFT('

mysql 語句sum函式求和 null 變 0

在SQL語句中使用集合函式count(),返回結果肯定為非負整數,這也是用來判斷資料有無的一個很有效的方法; 然後在用sum()進行集合相加的時候,如果sum()的物件沒有記錄,那麼不會返回0,而返回null,這麼做,不會影響資料庫,因為數值型欄位也是可以存放NULL的,因

T-SQL 語句——自定義函式

CREATE FUNCTION fn_chinese_week_day(@week_day INT) -- RETURNS NVARCHAR(3) BEGIN DECLARE @w INT SET @w = @week_day % 7 RETURN CASE @w

SQL語句count統計函式Echarts展示資料資訊

count統計非空        進行對資料表中的某一個屬性的查詢和統計,運用group by進行分組後,使用count進行統計。        比如,通過統計下面表中的學時資訊。        使用瞭如下的SQL語句: select trainHo

php 伺服器端解決json_decode()的bug 輸出null, json_last_error函式4語法錯誤

php 伺服器端解決json_decode() bug 問題: 問題描述: json_decode() 轉換json字串時輸出結果為 null,函式返回值為false 出現問題的分析: 1

SQL SERVER 利用字串函式輸出菱形圖案

declare @count int; set @count=1; while @count<6 begin print space(5-@count)+replicate('#',@coun

SQL語句查詢時有欄位中文時的解決方法

我在寫JDBC的是時候,遇見了因為在SQL語句中含有中文無法執行的情況,於是我把這句話放到mysql客戶端中測 試,結果通過,我就估計不是字元編碼問題,是PreparedStatement這個介面做了一些我不知道的處理導致這個問題的 發生。而且一般直接使用?問號代替動態查詢要求,而在客戶端中必須加上雙引號,

使用mysql sum統計函式 結果null時返回值改0

//查詢定時任務是否存在 public Integer getPetTime(HomePetTime homePetTime){ Integer result = 0; ConnectionDB util = new ConnectionDB(); Objec

SQL語句sum與count的區別

表fruitid     name    price1     apple     1.002     pear       4.00select count(price) from fruit; ----執行之後結果為:2  (表示有2條記錄)select  sum(price) from fruit;--

SQL語句SUM列出前面行的和

題目:已知資料庫  表名:Job  結構如下:   ID  DAY  TOTALSALES   1    5    40   2    4    50   3   10    10   4   16    20   5    2    30  ...  ... 通過SQL

使用sql語句直接生成dataset做水晶報表的資料來源

  使用sql語句直接生成dataset做為報表的資料來源(即push模式),這樣就可以接受引數了。當然報表有設定引數的功能 這方面我還沒有詳細研究   一.sql語句中沒有使用表的相互關聯(簡單的查詢語句)   設計一個DataSet   1) 右擊“解決方案瀏覽器”,選

SQL語句中MAX()函式和MIN()函式

MAX 函式返回一列中的最大值。NULL 值不包括在計算中。 SELECT MAX(column_name) FROM table_name 註釋:MIN 和 MAX 也可用於文字列,以獲得按字母

SQL---count()函式結果null時替換0

在sql中,做count()統計時,如果結果為null,這條資料是不顯示的,但是經常會有類似的需求,比如:統計江西省下的某11個市的企業數量,如果有些城市企業數量為0,會發現最後返回的結果不到11條。