mysql數(shù)據(jù)庫之count()函數(shù)和sum()函數(shù)用法及區(qū)別說明
mysql之count()和sum()用法及區(qū)別
1、mysql 數(shù)據(jù)庫中 count() 函數(shù)是統(tǒng)計查詢結(jié)果中的行數(shù),例如我們有下表 user_auth :

使用 count() 函數(shù)來查詢結(jié)果個數(shù),使用如下查詢:
mysql > select count(*) from user_auth ;? ?

注意的是,count 會忽略掉 NULL 的結(jié)果, 所以 count(字段名) 這樣使用的話,如果字段中包含為null的結(jié)果,將導(dǎo)致查詢結(jié)果不準(zhǔn)確,我們將表中數(shù)據(jù)更改如下:

此時查詢:
mysql > select count(user_id) from user_auth;
結(jié)果如下:

2、mysql 中 sum() 函數(shù)用于計算某一字段中所有行的數(shù)值之和( sum 求和時會對 null 進行過濾,不計算),例如如下查詢:
mysql > select sum(user_id) from user_auth;
結(jié)果如下:

另外也能使用 sum(條件) 進行對符合條件的結(jié)果行數(shù)進行求和,如下查詢:
mysql > select sum(user_id is null),sum(aid = 1) from user_auth;
結(jié)果如下:

需要注意的是,如果在沒有返回行中使用 sum() 函數(shù),sum 函數(shù)的返回值為 null,不是 0,例:
mysql > select sum(user_id) from user_auth where id not in (2,4,6);
結(jié)果如下:

此時使用JDBC或者一些第三方框架進行映射時就會報錯,
解決辦法是:
使用IFNULL(sum(user_id),0) 或者 COALESCE(sum(user_id),0) 進行結(jié)果的轉(zhuǎn)換。
mysql中sum()和count()函數(shù)按條件統(tǒng)計數(shù)據(jù)
sum()函數(shù)
一般求和
select sum(money) from user group by id;
按條件求和 (對所有金額大于100的數(shù)據(jù)進行求和)
select sum(if(money>=100,money,0)) from user group by id;
聚合函數(shù)中如果想?yún)R總某一類數(shù)據(jù)的數(shù)量,可以在括號中增加條件:
sum(case when 字段>0 then 1 else 0 end) as 字段
count()函數(shù)
要注意的是:count(case when 字段>0 then 1 else 0 end) as 字段,這樣寫的話
count函數(shù)不管記錄內(nèi)容是0或1,它的作用只是計算記錄數(shù),計算出來的是0和1的全部次數(shù),如果你要計算次數(shù),用sum(case when 字段>0 then 1 else 0 end) as 字段
或者你用 count(case when 字段>0 then 1 else null end) as 字段 這種寫法
基本原理是 使用了數(shù)據(jù)庫count(null)時返回的是0 ,count(非null)返回是1
SQL的執(zhí)行順序
- 第一步:執(zhí)行FROM
- 第二步:WHERE條件過濾
- 第三步:GROUP BY分組
- 第四步:執(zhí)行SELECT投影列
- 第五步:HAVING條件過濾
- 第六步:執(zhí)行ORDER BY 排序
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL億級數(shù)據(jù)平滑遷移雙寫方案實戰(zhàn)
預(yù)約業(yè)務(wù)與其他業(yè)務(wù)數(shù)據(jù)表存儲在同一個數(shù)據(jù)庫,當(dāng)其他業(yè)務(wù)出現(xiàn)慢SQL等異常時,會影響到預(yù)約業(yè)務(wù),為了提高系統(tǒng)穩(wěn)定性和數(shù)據(jù)隔離性,需要將預(yù)約數(shù)據(jù)表從原來的數(shù)據(jù)庫中遷移出來,單獨建立數(shù)據(jù)庫,涉及到的讀寫場景多,改造成本大,采用 Mybatis插件實現(xiàn)遷移所需的雙寫等功能2024-08-08
Mysql一些復(fù)雜的sql語句(查詢與刪除重復(fù)的行)
這篇文章主要介紹了Mysql一些復(fù)雜的sql語句(查詢與刪除重復(fù)的行),需要的朋友可以參考下2017-05-05

