【问题标题】:How to list groups and counts of uncompleted tasks?如何列出未完成任务的组和计数?
【发布时间】:2011-12-16 23:21:50
【问题描述】:

我有两个数据库表:

tasks:
task_id (unique id, autoincrement)
group_id (from the next table: groups, where task belongs to)
task_name
status (if task has been completed or not)

groups:
group_id (unique id, autoincrement)
group_name

我的目标是列出所有组以及其中未完成任务的数量(任务状态 0)。 我通过这个查询实现了这一点:

$sql_query = "SELECT g.id, g.name, count(g.id) as count
FROM task_groups g, tasks t
WHERE g.status = 0 AND t.group =  g.id AND t.status = 0
GROUP BY g.id
ORDER BY g.id ASC";

我得到这样的结果:

Group1 3 未完成 Group2 13 未完成 Group3 30 未完成

但未列出空任务组(没有任何属于特定组的任务)。

结果应该是这样的:

Group1 3 未完成 Group2 13 未完成 Group3 30 未完成 Group4 0 未完成 Group5 0 未完成

我怎样才能做到这一点?

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    你在正确的轨道上。 GROUP BY 组,但不计算组 id,而是尝试对不完整的任务执行 SUM,如下所示:

    SELECT g.id, g.name,
    SUM(IF(t.status = 0, 1, 0)) incomplete_tasks
    FROM task_groups g
    LEFT JOIN tasks t ON (t.group_id = g.id)
    GROUP BY g.id ASC
    HAVING incomplete_tasks > 0;
    

    如果您想列出所有个任务组,请省略HAVING 子句。

    注意:我没有在您的查询中看到 g.status 的用途,并且 status 未列为 groups 表中的列,因此我已将其排除在示例之外.

    【讨论】:

    • 这是所需的解决方案。顺便说一句 g.status 在这里不相关,所以你省略它是正确的。
    猜你喜欢
    • 1970-01-01
    • 2021-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多