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

2021-09-07 16:05:53 字數 3922 閱讀 8352

前言

其中 origin 是使用者**,其中的值有 iphone 、android 、web 三種,現在需要分別統計由這三種渠道註冊的使用者數量。

解決方案1?

12

3

4

5

6

7

8

9

selectcount(*)

fromuser_operation_log

whereorigin ='iphone';

selectcount(*)

fromuser_operation_log

whereorigin ='android';

selectcount(*)

fromuser_operation_log

whereorigin ='web';

用 where 語句分別統計各自的數量。

這樣查詢的量有點多了,如果這個值有 10 個呢,那還得寫 10 條相似的語句,很麻煩。

有沒有一條語句就搞定的呢?於是去查了些資料。

解決方案2

我們知道 count 不僅可以用來統計行數,也能統計列值的數量,例如:

統計 user_operation_log 有多少行:?

1selectcount(*)fromuser_operation_log

統計 origin 這列值不為 null 的數量:?

1selectcount(origin)fromuser_operation_log

所以我們可以利用這個特性來實現上面的需求

第一種寫法(用 count 實現)?

12

3

4

5

select

count(origin ='iphone'ornull)asiphone,

count(origin ='android'ornull)asandroid,

count(origin ='web'ornull)asweb

fromuser_operation_log;

查詢結果

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

12

3

4

5

select

sum(if(origin ='iphone', 1, 0))asiphone,

sum(if(origin ='android', 1, 0))asandroid,

sum(if(origin ='web', 1, 0))asweb

fromuser_operation_log;

查詢結果

第三種寫法(改寫 sum)?

12

3

4

5

select

sum(origin ='iphone')asiphone,

sum(origin ='android')asandroid,

sum(origin ='web')asweb

fromuser_operation_log;

查詢結果

第四種寫法(來自掘金使用者 傑夫 的答案)?

1selectorigin,count(*) numfromuser_operation_loggroupbyorigin;

查詢結果

至此,已經達到了我們的需求。

總結

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

前言 在一張表中,需要統計其中一列資料中,出現重複的記錄數。解決方案1 select count from table where origin 條件1 select count from user operation log where origin 條件2 select count from u...

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

前言 其中 origin 是使用者 其中的值有 iphone android web 三種,現在需要分別統計由這三種渠道註冊的使用者數量。解決方案1?1 2345 6789 selectcount fromuser operation log whereorigin iphone selectcou...

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

前言 其中 origin 是使用者 其中的值有 iphone android web 三種,現在需要分ufhlxti別統計由這三種渠道註冊的使用者數量。解決方案1 select count from user operation log where origin iphone select coun...