使用场景:
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;
方案四:
|