MySQL中的条件语句if

699 阅读1分钟

起因

在实际业务中, 我们经常会遇到根据一个状态或属性对数据进行统计的需求, 例如:

根据任务状态(未启动/运行中/已结束)来统计系统中的任务数量

解决方案

查询语句很简单:

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)具体运行逻辑如下:

  1. 获得表达式结果
  2. 表达式结果为true, 返回值1
  3. 表达式结果为false, 返回值2