Mysql中count帶條件計(jì)數(shù)實(shí)例代碼
count 帶條件計(jì)數(shù)
mysql 統(tǒng)計(jì)條數(shù)很簡單, 使用 count 函數(shù)就行,但是帶條件統(tǒng)計(jì),可能有些小伙伴跟我一樣,還有些疑問,廢話不多說 上代碼
表中三條數(shù)據(jù)
1. count(*) 和 count(字段) :
區(qū)別:count(*) 包含 null 值的條目,count(字段) 則不包含
例如:
select count(*) from sys_user // 返回 3 條數(shù)據(jù) select count(name) from sys_user // 返回 2數(shù)據(jù),就是將name字段為null的去除了
2.加條件count用法
例:求 age 小于 19 人數(shù)
select count(age < 19 or null) from sys_user // 返回 1條數(shù)據(jù)
條件可以隨便寫( > 、<、=、is null 等等),但是必須加上 or null ,否則統(tǒng)計(jì)出來 就是 3 條;
其他寫法,效果一致:
select count(if(age < 19, 1, null)) from sys_user // 返回 1條數(shù)據(jù) select count(case when age < 19 then 1 end) from sys_user // 返回 1條數(shù)據(jù)
附:count(1)和count(*)和count(列名)的區(qū)別
1.函數(shù)說明
- count(1):統(tǒng)計(jì)所有的記錄(包括null)。
- count(*):統(tǒng)計(jì)所有的記錄(包括null)。
- count(字段):統(tǒng)計(jì)該"字段"不為null的記錄。
- count(distinct 字段):統(tǒng)計(jì)該"字段"去重且不為null的記錄。
count(1)中的1并不是表示第一個(gè)字段,而是表示一個(gè)固定值。其實(shí)就可以想成表中有這么一個(gè)字段,這個(gè)字段就是固定值1,count(1),就是計(jì)算一共有多少個(gè)1。count(*),執(zhí)行時(shí)會(huì)把星號(hào)翻譯成字段的具體名字,效果也是一樣的,不過多了一個(gè)翻譯的動(dòng)作,比固定值的方式效率稍微低一些。
2.執(zhí)行效率
他們之間根據(jù)不同情況會(huì)有些許區(qū)別,MySQL 會(huì)對(duì)count()做優(yōu)化。(1)如果表中只有一列,則count( )效率最優(yōu)。(2)如果表有多列,且存在主鍵,count (主鍵列名)效率最優(yōu),其次是:count (1) >count( *)。(3)如果表有多列,且不存在主鍵,則count(1 )效率優(yōu)于count( *)
3.執(zhí)行過程
- count(*)包括了所有的列,相當(dāng)于行數(shù),在統(tǒng)計(jì)結(jié)果的時(shí)候, 包括列值為NULL的行。
- count(1)包括了忽略所有列,用1代表代碼行,在統(tǒng)計(jì)結(jié)果的時(shí)候, 包括列值為NULL的行。
- count(列名)只包括列名那一列,在統(tǒng)計(jì)結(jié)果的時(shí)候,會(huì)忽略列值為空(這里的空不是只空字符串或者0,而是表示null)的計(jì)數(shù), 即某個(gè)字段值為NULL時(shí),不統(tǒng)計(jì)。
4.注意事項(xiàng)
阿里開發(fā)手冊(cè)規(guī)范相關(guān)規(guī)定:
1.【強(qiáng)制】不要使用 count(列名)或 count(常量)來替代 count(),count()是 SQL92 定義的標(biāo) 準(zhǔn)統(tǒng)計(jì)行數(shù)的語法,跟數(shù)據(jù)庫無關(guān),跟 NULL 和非 NULL 無關(guān). 說明:count(*)會(huì)統(tǒng)計(jì)值為 NULL 的行,而 count(列名)不會(huì)統(tǒng)計(jì)此列為 NULL 值的行.
2.【強(qiáng)制】count(distinct col) 計(jì)算該列除 NULL 之外的不重復(fù)行數(shù),注意 count(distinct col1, col2) 如果其中一列全為 NULL,那么即使另一列有不同的值,也返回為 0.
總結(jié)
到此這篇關(guān)于Mysql中count帶條件計(jì)數(shù)的文章就介紹到這了,更多相關(guān)Mysql count帶條件計(jì)數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于MYSQL 你需要知道的數(shù)據(jù)類型和操作數(shù)據(jù)表
這篇文章主要介紹了關(guān)于MYSQL中數(shù)據(jù)類型的知識(shí)和操作數(shù)據(jù)表的方法,文中講解非常詳細(xì)供大家參考學(xué)習(xí),感興趣的朋友可以了解下2020-06-06MySQLexplain之possible_keys、key及key_len詳解
這篇文章主要介紹了MySQLexplain之possible_keys、key及key_len的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08iOS開發(fā)runloop運(yùn)行循環(huán)機(jī)制學(xué)習(xí)
這篇文章主要為大家介紹了iOS開發(fā)runloop運(yùn)行循環(huán)的機(jī)制學(xué)習(xí),有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-07-07mysql如何將時(shí)間格式化為yyyy-MM-dd或yyyy-MM-dd?HH:mm:ss
這篇文章主要介紹了mysql如何將時(shí)間格式化為yyyy-MM-dd或yyyy-MM-dd?HH:mm:ss問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-07-07Mysql 5.7.18 解壓版下載安裝及啟動(dòng)mysql服務(wù)的圖文詳解
這篇文章主要介紹了Mysql 5.7.18 解壓版下載安裝及啟動(dòng)mysql服務(wù)的圖文詳解,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-05-05MySQL數(shù)據(jù)中很多換行符和回車符的解決方法
這篇文章主要給大家介紹了關(guān)于MySQL數(shù)據(jù)中很多換行符和回車符的解決方法,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10ERROR 2002 (HY000): Can''t connect to local MySQL server thr
mysql 支持 socket 和 TCP/IP 連接。那么 mysql.sock 這個(gè)文件有什么用呢?本文給大家介紹的非常詳細(xì),需要的朋友參考下吧2019-11-11