2016-08-10 3 views
1

テストテーブル、質問テーブル、および応答テーブルを持つデータセットがあります。いくつかの質問には、同じユーザーが複数回回答することができます。ユーザーが同じ質問に複数回回答するたびに、回答の順序が回答のソート順として保存されます。行が異なる列で一致したときに列の最大値を返すSQLクエリ

私は、テストIDが与えられた各回答と、ユーザーが各質問に回答した回数を返すクエリを作成しようとしています。その番号を並べ替え順序とともに使用して、特定の「answer n of 3」(nは並べ替え順序番号、3はユーザーがその質問に回答した回数)を使用します。答え回数を与えるものではありません、私がこれまでにIS持っている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は4回、質問2は2回の質問です。番号はそれぞれの答えにあるはずです。言い換えれば、質問2へのユーザ2の回答のそれぞれは、「number_of_responses」という数字4を持つでしょう。subOrderとペアになって、回答は1の4、2の4などと言えるでしょう。私はそれを考えていますサブクエリ、または最大値になりますが、最大値を得ることができませんでした。これを達成するための最善の方法はわかりません。私が正しく理解していれば

+0

サンプルデータおよび提供されるサンプル・データでcorelates望ましい結果を添付してください。これは文字列の連結で私に窓関数のように思える。 –

答えて

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 
+0

助けてくれてありがとう。私は窓の機能について知らなかった。私は、私が望むものを得るために追加のパーティションを追加する必要がありましたが、そのトリックでした。 –

関連する問題