利用MySQL統計一列中不一樣值的數量方法示例

本文實現的這個需求其實十分廣泛,舉例來講,咱們存在一個用戶來源表,用來標記用戶從哪一個渠道註冊進來。sql

表結構以下所示…blog

其中 origin 是用戶來源,其中的值有 iPhone 、Android 、Web 三種,如今須要分別統計由這三種渠道註冊的用戶數量。io

解決方案1class

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 語句分別統計各自的數量。im

這樣查詢的量有點多了,若是這個值有 10 個呢,那還得寫 10 條類似的語句,很麻煩。d3

有沒有一條語句就搞定的呢?因而去查了些資料。統計

解決方案2查詢

咱們知道 count 不只能夠用來統計行數,也能統計列值的數量,例如:img

統計 user_operation_log 有多少行:di

SELECT count(*) FROM user_operation_log

統計 origin 這列值不爲 NULL 的數量:

SELECT count(origin) FROM user_operation_log

因此咱們能夠利用這個特性來實現上面的需求

第一種寫法(用 count 實現)

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;

查詢結果

第二種寫法(用 sum 實現):

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;

查詢結果:

第四種寫法:

SELECT origin,count(*) num FROM user_operation_log GROUP BY origin;

查詢結果:

相關文章
相關標籤/搜索