SQL查询,当行与其他列匹配时返回列的最大值
我有一个包含测试表、问题表和回答表的数据集。有些问题可以由同一用户多次回答。每次用户多次回答同一问题时,他们回答的顺序将存储为答案的排序顺序 我试图编写一个查询,返回给定测试id的每个答案所需的信息,以及用户回答每个问题的次数。我将把该数字与排序顺序一起用于特定的“答案n/3”,其中n是排序顺序编号,3是用户回答该问题的次数。到目前为止,我得到的sql是,它没有给出回答的次数,是:SQL查询,当行与其他列匹配时返回列的最大值,sql,postgresql,Sql,Postgresql,我有一个包含测试表、问题表和回答表的数据集。有些问题可以由同一用户多次回答。每次用户多次回答同一问题时,他们回答的顺序将存储为答案的排序顺序 我试图编写一个查询,返回给定测试id的每个答案所需的信息,以及用户回答每个问题的次数。我将把该数字与排序顺序一起用于特定的“答案n/3”,其中n是排序顺序编号,3是用户回答该问题的次数。到目前为止,我得到的sql是,它没有给出回答的次数,是: select q.id as question_id ,r."textValue" as text
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的每个答案都有一个4的“回答数”。再加上子顺序,我可以说答案是4中的1,4中的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
请附上样品数据和与提供的样品数据相关的预期结果。对我来说,这似乎是一个带有字符串连接的窗口函数。谢谢你的帮助。我不知道窗口的功能。我需要添加一个额外的分区来获得我想要的东西,但这样做了。