我有一个包含测试表,问题表和响应表的数据集。有些问题可以由同一个用户多次回答。每当用户多次回答相同问题时,他们回答的顺序将作为答案的排序顺序存储。
我正在尝试编写一个查询,该查询将返回给定测试ID的每个答案所需的信息,以及用户回答每个问题的次数。我将这个数字与排序顺序一起使用到特定的“回答n为3”,其中n是排序顺序号,3是用户回答该问题的次数。到目前为止我的sql,它没有给出答案的次数,是:
select q.id as question_id
,r."textValue" as text_value, r.id, r.id as response_id
,q."internalQuestion" as "is_internal_question"
,q."requestExplanation" as "question_text"
,r."subResponseOrder" as "subOrder"
from response r
join question q on (r.question_id = q.id)
where r.test_id = 12345
如何修改此查询以向我提供用户提交的每个问题的最大子顺序?如在用户3中回答问题#3四次,问题#2回答两次。数字应该在每个答案上。换句话说,用户2对问题3的回答中的每一个都将具有“number_of_responses”数量为4.与subOrder配对,我可以说答案是4个中的1个,4个中的2个等等...我在想它将是一个子查询,或者是一个最大值,但我无法获得最大值,我不知道实现它的最佳方法。
答案 0 :(得分:2)
如果我理解正确,你可以使用窗口功能:
select q.id as question_id,
r."textValue" as text_value, r.id, r.id as response_id,
q."internalQuestion" as "is_internal_question",
q."requestExplanation" as "question_text",
r."subResponseOrder" as "subOrder",
max(r."subResponseOrder") over (partition by q.id) as max_subResponseOrder
from response r join
question q
on r.question_id = q.id
where r.test_id = 12345