Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/87.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL查询,当行与其他列匹配时返回列的最大值_Sql_Postgresql - Fatal编程技术网

SQL查询,当行与其他列匹配时返回列的最大值

SQL查询,当行与其他列匹配时返回列的最大值,sql,postgresql,Sql,Postgresql,我有一个包含测试表、问题表和回答表的数据集。有些问题可以由同一用户多次回答。每次用户多次回答同一问题时,他们回答的顺序将存储为答案的排序顺序 我试图编写一个查询,返回给定测试id的每个答案所需的信息,以及用户回答每个问题的次数。我将把该数字与排序顺序一起用于特定的“答案n/3”,其中n是排序顺序编号,3是用户回答该问题的次数。到目前为止,我得到的sql是,它没有给出回答的次数,是: select q.id as question_id ,r."textValue" as text

我有一个包含测试表、问题表和回答表的数据集。有些问题可以由同一用户多次回答。每次用户多次回答同一问题时,他们回答的顺序将存储为答案的排序顺序

我试图编写一个查询,返回给定测试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的每个答案都有一个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

请附上样品数据和与提供的样品数据相关的预期结果。对我来说,这似乎是一个带有字符串连接的窗口函数。谢谢你的帮助。我不知道窗口的功能。我需要添加一个额外的分区来获得我想要的东西,但这样做了。