高级:
我有 list , list 有 list 项目。我想获得已完成的 list 的数量。具体来说,有 list 项目但全部完成的 list 。
表格:
Table "checklists"
| Column | Type |
+--------------+------------------------+
| id | integer |
| name | character varying(255) |
Table "checklist_items"
| Column | Type |
+--------------+------------------------+
| id | integer |
| completed | boolean |
| name | character varying(255) |
| checklist_id | integer |
问题: 什么查询会给我完成的 list 计数?具体来说,要小心排除包含完整和不完整 list 项目的 list 以及没有 list 项目的 list 。
到目前为止已尝试:
SELECT DISTINCT COUNT(DISTINCT "checklists"."id")
FROM "checklists"
INNER JOIN "checklist_items" ON "checklist_items"."checklist_id" = "checklists"."id"
WHERE "checklist_items"."completed" = 't'
这个问题的问题是它不排除部分完成的 list 。
最佳答案
更快,但:
SELECT count(DISTINCT i.checklist_id)
FROM checklist_items i
LEFT JOIN checklist_items i1 ON i1.checklist_id = i2.checklist_id
AND i.completed IS NOT TRUE
WHERE i.completed
AND i1.checklist_id IS NULL;
这只会收集存在已完成项目的 list 。
并排除那些存在另一个未完成的 checklist_item(FALSE
或 NULL
)。
关于sql - 选择引用行的唯一计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16242245/