利用MySQL統(tǒng)計一列中不同值的數(shù)量方法示例
前言
本文實現(xiàn)的這個需求其實十分普遍,舉例來說,我們存在一個用戶來源表,用來標記用戶從哪個渠道注冊進來。表結(jié)構(gòu)如下所示…

其中 origin 是用戶來源,其中的值有 iPhone 、Android 、Web 三種,現(xiàn)在需要分別統(tǒng)計由這三種渠道注冊的用戶數(shù)量。
解決方案1
SELECT count(*) FROM user_operation_log WHERE origin = 'iPhone'; SELECT count(*) FROM user_operation_log WHERE origin = 'Android'; SELECT count(*) FROM user_operation_log WHERE origin = 'Web';
用 where 語句分別統(tǒng)計各自的數(shù)量。
這樣查詢的量有點多了,如果這個值有 10 個呢,那還得寫 10 條相似的語句,很麻煩。
有沒有一條語句就搞定的呢?于是去查了些資料。
解決方案2
我們知道 count 不僅可以用來統(tǒng)計行數(shù),也能統(tǒng)計列值的數(shù)量,例如:
統(tǒng)計 user_operation_log 有多少行:
SELECT count(*) FROM user_operation_log
統(tǒng)計 origin 這列值不為 NULL 的數(shù)量:
SELECT count(origin) FROM user_operation_log
所以我們可以利用這個特性來實現(xiàn)上面的需求
第一種寫法(用 count 實現(xiàn))
SELECT count(origin = 'iPhone' OR NULL) AS iPhone, count(origin = 'Android' OR NULL) AS Android, count(origin = 'Web' OR NULL) AS Web FROM user_operation_log;
查詢結(jié)果

第二種寫法(用 sum 實現(xiàn))
SELECT sum(if(origin = 'iPhone', 1, 0)) AS iPhone, sum(if(origin = 'Android', 1, 0)) AS Android, sum(if(origin = 'Web', 1, 0)) AS Web FROM user_operation_log;
查詢結(jié)果

第三種寫法(改寫 sum)
SELECT sum(origin = 'iPhone') AS iPhone, sum(origin = 'Android') AS Android, sum(origin = 'Web') AS Web FROM user_operation_log;
查詢結(jié)果

第四種寫法(來自掘金用戶 杰夫 的答案)
SELECT origin,count(*) num FROM user_operation_log GROUP BY origin;
查詢結(jié)果

至此,已經(jīng)達到了我們的需求。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
MySQL刪除數(shù)據(jù)后自增主鍵ID不連貫問題及解決
這篇文章主要介紹了MySQL刪除數(shù)據(jù)后自增主鍵ID不連貫問題及解決,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-09-09
MySQL order by與group by查詢優(yōu)化實現(xiàn)詳解
order by 子句盡量使用index方式排序(即using index),避免使用filesort方式排序(即using filesort)。Index方式效率高,它指MySQL掃描索引本身完成排序,filesort則效率低2022-11-11
MySQL 8.0.13設(shè)置日期為0000-00-00 00:00:00時出現(xiàn)的問題解決
這篇文章主要介紹了MySQL 8.0.13設(shè)置日期為0000-00-00 00:00:00時出現(xiàn)的問題解決,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01
mysql 數(shù)據(jù)庫備份和還原方法集錦 推薦
本文討論 MySQL 的備份和恢復(fù)機制,以及如何維護數(shù)據(jù)表,包括最主要的兩種表類型:MyISAM 和 Innodb,文中設(shè)計的 MySQL 版本為 5.0.22。2010-03-03

