更正一下,准确需求如下:
1. 有一个【文章评论】的表,含“文章ID”、“文章评论ID”、“评论内容”、“是否点赞”(是否字段,1=是,0=否)、“评论用户”,用于记录用户对哪些文章评论或点赞了;
2. 有一个【文章库】的表,含“文章ID”、“文章标题”、“是否上架”,用于存所有的文章;
需求:
创建一个【文章评论点赞查询】的视图,含“文章ID”、“文章标题”、“是否上架”、“评论数”、“点赞数”的字段。文章“评论数”的计算规则:该“文章ID”在【文章评论】表中,“是否点赞”字段为空值的行数,如果该“文章ID”未在【文章评论】表中未出现,则“评论数”为0;“点赞数”的计算规则:该“文章ID”在【文章评论】表中,“是否点赞”字段值的求和,如果该“文章ID”未在【文章评论】表出现,则“点赞数”为0。
我用如下语句实现了:
SELECT a."文章ID", a."文章标题", a."是否发布",
COALESCE(c."评论数", 0) AS "评论数",
COALESCE(l."点赞数", 0) AS "点赞数"
FROM "文章库_article" a
LEFT JOIN (
SELECT "文章ID", COUNT(*) AS "评论数"
FROM "文章评论_articlecomment"
WHERE "点赞" IS NULL
GROUP BY "文章ID"
) c ON a."文章ID" = c."文章ID"
LEFT JOIN (
SELECT "文章ID", SUM("点赞") AS "点赞数"
FROM "文章评论_articlecomment"
GROUP BY "文章ID"
) l ON a."文章ID" = l."文章ID"
|