SQL查询在不同列上的行匹配时返回列的最大值

时间:2016-08-10 22:12:19

标签: sql postgresql

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

我正在尝试编写一个查询,该查询将返回给定测试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个等等...我在想它将是一个子查询,或者是一个最大值,但我无法获得最大值,我不知道实现它的最佳方法。

1 个答案:

答案 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