使用場景:
eg1:按照同一字段的不同值進行分類,統計其他字段!
ID | 分類 | 金額 |
---|---|---|
1 | 支出 | 100 |
1 | 收入 | 200 |
1 | 收入 | 299 |
假如數據庫中有表table,這是一張記賬表,現在要求用SQL算出ID爲1的用戶的總收入和總支出各是多少
那麼就要用到MySQL的流程控制函數了:
select id,
sum(IF(分類='收入',金額,0)) as 總收入,
sum(IF(分類!='收入',金額,0)) as 總支出
from table where id=1
如果第一個參數 分類='收入' 成立 就對第二個參數所在列求和,如果不成立的就返回0,三個參數都要寫上.第二個sum就是分類不爲收入的了.
eg2:這個更詳細 https://www.jb51.net/article/112492.htm
表:user_operation_log
origin | type | uid |
iphone | 1 | 384284 |
android | 1 | 384283 |
iphone | 1 | 384282 |
android | 1 | 384281 |
其中 origin 是用戶來源,其中的值有 iPhone 、Android 、Web 三種,現在需要分別統計由這三種渠道註冊的用戶數量。
方案一:用 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;
方案二:(用 if 實現):
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
sum
(origin =
'iPhone'
)
AS
iPhone,
sum
(origin =
'Android'
)
AS
Android,
sum
(origin =
'Web'
)
AS
Web
FROM
user_operation_log;
方案四:
|