Mysql中count帶條件計(jì)數(shù)實(shí)例代碼
count 帶條件計(jì)數(shù)
mysql 統(tǒng)計(jì)條數(shù)很簡(jiǎn)單, 使用 count 函數(shù)就行,但是帶條件統(tǒng)計(jì),可能有些小伙伴跟我一樣,還有些疑問(wèn),廢話不多說(shuō) 上代碼

表中三條數(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ù)
條件可以隨便寫(xiě)( > 、<、=、is null 等等),但是必須加上 or null ,否則統(tǒng)計(jì)出來(lái) 就是 3 條;
其他寫(xiě)法,效果一致:
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ù)說(shuō)明
- 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)翻譯成字段的具體名字,效果也是一樣的,不過(guò)多了一個(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í)行過(guò)程
- 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)
阿里開(kāi)發(fā)手冊(cè)規(guī)范相關(guān)規(guī)定:
1.【強(qiáng)制】不要使用 count(列名)或 count(常量)來(lái)替代 count(),count()是 SQL92 定義的標(biāo) 準(zhǔn)統(tǒng)計(jì)行數(shù)的語(yǔ)法,跟數(shù)據(jù)庫(kù)無(wú)關(guān),跟 NULL 和非 NULL 無(wú)關(guān). 說(shuō)明: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)文章
簡(jiǎn)單了解mysql InnoDB MyISAM相關(guān)區(qū)別
這篇文章主要介紹了簡(jiǎn)單了解mysql InnoDB MyISAM相關(guān)區(qū)別,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09
詳解mysql 使用left join添加where條件的問(wèn)題分析
這篇文章主要介紹了詳解mysql 使用left join添加where條件的問(wèn)題分析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02
SQL實(shí)現(xiàn)LeetCode(185.系里前三高薪水)
這篇文章主要介紹了SQL實(shí)現(xiàn)LeetCode(185.系里前三高薪水),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-08-08
linux 之centos7搭建mysql5.7.29的詳細(xì)過(guò)程
這篇文章主要介紹了linux 之centos7搭建mysql5.7.29的詳細(xì)過(guò)程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05

