我正在尝试从我的数据库中检索一些统计数据,具体而言,我希望显示已完成的待办事项数量与清单的总数相比。
结构如下
一个类别有很多卡片,有很多清单,有很多评估。
我可以通过以下查询获得评估金额或已完成的评估。
SELECT count(a.id) AS completed_count, a.checklist_id, ca.category_id
FROM assessments a
JOIN checklists ch ON ch.id = a.checklist_id
JOIN cards ca ON ca.id = ch.card_id
WHERE a.complete
GROUP BY a.checklist_id, ca.category_id;
这会给我这样的东西。
completed_count | checklist_id | category_id
-----------------+--------------+-------------
2 | 3 | 2
1 | 2 | 2
2 | 5 | 3
然后,我可以通过删除WHERE a.complete
来执行查询,以获取总金额,并编写一些与这两个结果匹配的代码。
但我真正想要的是这样的结果。
completed_amount | total_amount | checklist_id | category_id
------------------+--------------+--------------+-------------
2 | 2 | 3 | 2
1 | 1 | 2 | 2
2 | 2 | 5 | 3
我无法绕过头脑,我怎么能实现这一点。
答案 0 :(得分:0)
我认为条件聚合可以满足您的需求:
SELECT sum( (a.complete)::int ) AS completed_count,
count(*) as total_count
a.checklist_id, ca.category_id
FROM assessments a JOIN
checklists ch
ON ch.id = a.checklist_id JOIN
cards ca
ON ca.id = ch.card_id
GROUP BY a.checklist_id, ca.category_id;