【发布时间】:2021-11-14 03:39:24
【问题描述】:
我有以下 SQL 查询来计算标签低于某个阈值的不同测验。
SELECT
COUNT(DISTINCT "quizzes"."id")
FROM
"quizzes"
INNER JOIN "sessions" ON "sessions"."id" = "quizzes"."session_id"
INNER JOIN "subscriptions" ON "subscriptions"."id" = "sessions"."subscription_id"
LEFT OUTER JOIN "quiz_answers" ON "quiz_answers"."quiz_id" = "quizzes"."id"
LEFT OUTER JOIN "answers" ON "answers"."id" = "quiz_answers"."answer_id"
LEFT OUTER JOIN "tag_scores" ON "tag_scores"."answer_id" = "answers"."id"
LEFT OUTER JOIN "tags" ON "tags"."id" = "tag_scores"."tag_id"
WHERE
(subscriptions.state = 'subscribed')
AND (
tags.id = 56
and score <= 10
);
score 是同一测验下存在的同一标签的总和。
我希望能够在查询中添加如下内容:
SUM(tag_scores.score) group by tags.id, quizzes.id AS score
这样分数不是根据特定标签分数计算的,而是根据tags.id 和quizzes.id 分组的相同标签的总和计算的。
输出应该只是结果的计数。
我很难将其添加到查询中。
任何想法或提示如何继续?
【问题讨论】:
-
我们能否看到一些示例数据及其预期输出?
-
我故意避免添加样本数据,因为所有的关节,这会导致不必要的混乱。与上述示例相关的是,分数应从
tag_scores.score求和,并按tags.id和quizzes.id分组。结果应该只是找到的行数。 -
count(*)给出行数。那不行吗? -
我发布的查询工作。但它缺少
SUM(tag_scores.score) group by tags.id, quizzes.id AS score部分,我不知道在哪里输入查询。 -
group by tags.id, quizzes.id不同意发出单个COUNT(DISTINCT "quizzes"."id")。如果您将tags.id添加到输出中,可能会有意义。但你不希望那样。那么您是否要分别强制每个包含的tag.id的总和低于 10?请解释一下。
标签: sql postgresql