目标是根据每个任务的状态获取任务列表的进度,排除无效任务。
目前,我成功地做到了这一点,但代价非常高昂,我想知道是否有可能在一个SQL语句中实现相同的结果,或者至少找到一种更优化的方法。
SELECT COUNT(`id`) AS `status` FROM `task` WHERE `status` = 'done'
UNION
SELECT COUNT(`id`) AS `status` FROM `task` WHERE `status` = 'pending';
上面的查询结果是2行,我可以把它们加起来,得到5的总和,这是正确的,第一行是已完成任务的计数:从那里很容易得到3/5或
60%完成
status
------
3
2
我知道这个例子很具体,我试过这个查询,但是遇到了一些问题。是关于分组的吗?或者我完全错了?
SELECT
COUNT(CASE WHEN `status` = 'done' THEN 1 ELSE 0 END) AS `done`,
COUNT(CASE WHEN `status` = 'pending' THEN 1 ELSE 0 END) AS `pending`
FROM `task`
GROUP BY `status`;
上面的查询分为2列和3个重复行:
done pending
---------------
3 3
1 1
2 2
在这个示例表中,我看到5个有效任务中有3个或60%已完成。
name status
------------------
task 1 done
task 2 done
task 3 pending
task 4 done
task 5 invalid
task 6 pending
谢谢你的帮助!