lists
의 표가 있으며 각각은 posts
입니다. 각 list
의 각 posts
이 얼마나 많은지 알려주는 쿼리를 원합니다. 게시물이없는 각 목록에 대해 0이 포함 된 항목이 포함되어 있습니다.GROUP BY를 포함하여 0 포함하지 않음
예 :
posts
:
id | list_id
--------------
1 | 1
2 | 1
3 | 2
4 | 2
lists
: 나는 다음과 같은 쿼리를 사용하여 이렇게 한
list_id | num_posts
-------------------
1 | 2
2 | 2
3 | 0
, 그러나 효과적으로 할 바보 조금 느낌 :
id
---
1
2
3
은 반환해야합니다 그룹화 한 다음 다른 하위 쿼리를 실행하여 bl을 채 웁니다. 답변 :
WITH "count_data" AS (
SELECT "posts"."list_id" AS "list_id", COUNT(DISTINCT "posts"."id") AS "num_posts"
FROM "posts"
INNER JOIN "lists" ON "posts"."list_id" = "lists"."id"
GROUP BY "posts"."list_id"
)
SELECT "lists"."id", COALESCE("count_data"."num_posts", 0)
FROM "lists"
LEFT JOIN "count_data" ON "count_data"."list_id" = "lists"."id"
ORDER BY "count_data"."num_posts" DESC
감사합니다. 나는 당신의 질문을 이해하면
니스, 나는'GROUPING BY''lists.id'에 대해 생각하지 않았습니다. 감사. – RobHeaton