前言
其中 origin 是使用者**,其中的值有 iphone 、android 、web 三種,現在需要分別統計由這三種渠道註冊的使用者數量。
解決方案1?
12
3
4
5
6
7
8
9
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 語句分別統計各自的數量。
這樣查詢的量有點多了,如果這個值有 10 個呢,那還得寫 10 條相似的語句,很麻煩。
有沒有一條語句就搞定的呢?於是去查了些資料。
解決方案2
我們知道 count 不僅可以用來統計行數,也能統計列值的數量,例如:
統計 user_operation_log 有多少行:?
1select
count
(*)
from
user_operation_log
統計 origin 這列值不為 null 的數量:?
1select
count
(origin)
from
user_operation_log
所以我們可以利用這個特性來實現上面的需求
第一種寫法(用 count 實現)?
12
3
4
5
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 實現)?
12
3
4
5
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;
查詢結果
第三種寫法(改寫 sum)?
12
3
4
5
select
sum
(origin =
'iphone'
)
as
iphone,
sum
(origin =
'android'
)
as
android,
sum
(origin =
'web'
)
as
web
from
user_operation_log;
查詢結果
第四種寫法(來自掘金使用者 傑夫 的答案)?
1select
origin,
count
(*) num
from
user_operation_log
group
by
origin;
查詢結果
至此,已經達到了我們的需求。
總結
利用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...