起因
在实际业务中, 我们经常会遇到根据一个状态或属性对数据进行统计的需求, 例如:
根据任务状态(未启动/运行中/已结束)来统计系统中的任务数量
解决方案
查询语句很简单:
select count(1) from t_task group by status;
但这条语句查出来的数据, 往往是无法和前端进行交互的, 前端希望得到的内容往往是:
{
"all": 100,
"wait": 20,
"start": 50,
"end": 30
}
笔者是个懒人, 想通过一条语句就把结果直接生成出来, 我们直接利用MySQL的if函数:
select
count(1) as all,
sum(if(status = 0, 1, 0) as wait,
sum(if(status = 1, 1, 0) as start,
sum(if(status = 2, 1, 0) as end
from t_task;
if(表达式, 值1, 值2)具体运行逻辑如下:
- 获得表达式结果
- 表达式结果为true, 返回值1
- 表达式结果为false, 返回值2