我可以合并两个查询的结果吗?

时间:2018-01-30 16:07:28

标签: sql postgresql

我正在尝试从我的数据库中检索一些统计数据,具体而言,我希望显示已完成的待办事项数量与清单的总数相比。

结构如下

一个类别有很多卡片,有很多清单,有很多评估。

我可以通过以下查询获得评估金额或已完成的评估。

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

我无法绕过头脑,我怎么能实现这一点。

1 个答案:

答案 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;