【发布时间】:2014-04-06 22:52:47
【问题描述】:
我有一个VoteQuestion 表:VoteQuestion(idUser → User, idQuestion → Content, isUp)
还有一个Question 表:Question(idQuestion → Content, title)
我想选择得分最高的 5 个问题(赞成-反对)。
赞成票是VoteQuestion 和isUp = TRUE,反对票是VoteQuestion 和isUp = FALSE。
我尝试了以下查询,但这不是我想要的。它对每个问题给出相同的分数。
WITH upvotes AS
(
SELECT COUNT(*) AS "a"
FROM "VoteQuestion", "Question"
WHERE "VoteQuestion"."idQuestion" = "Question"."idQuestion"
AND "VoteQuestion"."isUp" IS TRUE
),
downvotes AS
(
SELECT COUNT(*) AS "b"
FROM "VoteQuestion", "Question"
WHERE "VoteQuestion"."idQuestion" = "Question"."idQuestion"
AND "VoteQuestion"."isUp" IS FALSE
)
SELECT "title", "Question"."idQuestion", upvotes."a"-downvotes."b" AS total
FROM "VoteQuestion", "Question", upvotes, downvotes
WHERE "VoteQuestion"."idQuestion" = "Question"."idQuestion"
GROUP BY "title", "Question"."idQuestion", upvotes."a", downvotes."b"
ORDER BY "total" DESC
LIMIT 5
也试过这个:
SELECT "title", "Question"."idQuestion",
( SELECT COUNT(*)
FROM "VoteQuestion", "Question"
WHERE "VoteQuestion"."idQuestion" = "Question"."idQuestion"
AND "VoteQuestion"."isUp" IS TRUE
) AS upvotes,
( SELECT COUNT(*)
FROM "VoteQuestion", "Question"
WHERE "VoteQuestion"."idQuestion" = "Question"."idQuestion"
AND "VoteQuestion"."isUp" IS FALSE
) AS downvotes, upvotes-downvotes AS total
FROM "VoteQuestion", "Question"
WHERE "VoteQuestion"."idQuestion" = "Question"."idQuestion"
GROUP BY "title", "Question"."idQuestion"
ORDER BY total DESC
LIMIT 5
但上面写着ERROR: column "upvotes" does not exist
如何从查询中获取某一列中赞成票和反对票的区别?
【问题讨论】:
标签: sql postgresql select difference