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

表中三條數(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)計出來 就是 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)計所有的記錄(包括null)。
- count(*):統(tǒng)計所有的記錄(包括null)。
- count(字段):統(tǒng)計該"字段"不為null的記錄。
- count(distinct 字段):統(tǒng)計該"字段"去重且不為null的記錄。
count(1)中的1并不是表示第一個字段,而是表示一個固定值。其實就可以想成表中有這么一個字段,這個字段就是固定值1,count(1),就是計算一共有多少個1。count(*),執(zhí)行時會把星號翻譯成字段的具體名字,效果也是一樣的,不過多了一個翻譯的動作,比固定值的方式效率稍微低一些。
2.執(zhí)行效率
他們之間根據(jù)不同情況會有些許區(qū)別,MySQL 會對count()做優(yōu)化。(1)如果表中只有一列,則count( )效率最優(yōu)。(2)如果表有多列,且存在主鍵,count (主鍵列名)效率最優(yōu),其次是:count (1) >count( *)。(3)如果表有多列,且不存在主鍵,則count(1 )效率優(yōu)于count( *)
3.執(zhí)行過程
- count(*)包括了所有的列,相當于行數(shù),在統(tǒng)計結果的時候, 包括列值為NULL的行。
- count(1)包括了忽略所有列,用1代表代碼行,在統(tǒng)計結果的時候, 包括列值為NULL的行。
- count(列名)只包括列名那一列,在統(tǒng)計結果的時候,會忽略列值為空(這里的空不是只空字符串或者0,而是表示null)的計數(shù), 即某個字段值為NULL時,不統(tǒng)計。
4.注意事項
阿里開發(fā)手冊規(guī)范相關規(guī)定:
1.【強制】不要使用 count(列名)或 count(常量)來替代 count(),count()是 SQL92 定義的標 準統(tǒng)計行數(shù)的語法,跟數(shù)據(jù)庫無關,跟 NULL 和非 NULL 無關. 說明:count(*)會統(tǒng)計值為 NULL 的行,而 count(列名)不會統(tǒng)計此列為 NULL 值的行.
2.【強制】count(distinct col) 計算該列除 NULL 之外的不重復行數(shù),注意 count(distinct col1, col2) 如果其中一列全為 NULL,那么即使另一列有不同的值,也返回為 0.
總結
到此這篇關于Mysql中count帶條件計數(shù)的文章就介紹到這了,更多相關Mysql count帶條件計數(shù)內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
簡單了解mysql InnoDB MyISAM相關區(qū)別
這篇文章主要介紹了簡單了解mysql InnoDB MyISAM相關區(qū)別,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09
詳解mysql 使用left join添加where條件的問題分析
這篇文章主要介紹了詳解mysql 使用left join添加where條件的問題分析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-02-02
SQL實現(xiàn)LeetCode(185.系里前三高薪水)
這篇文章主要介紹了SQL實現(xiàn)LeetCode(185.系里前三高薪水),本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下2021-08-08
linux 之centos7搭建mysql5.7.29的詳細過程
這篇文章主要介紹了linux 之centos7搭建mysql5.7.29的詳細過程,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-05-05

