2009-06-01 16 views
0

私は次のような構造を持つPostgreSQLのテーブル&データを持っている:PostgreSQLのデータ分析/集計

Question  | Answer  | Responses 
--------------------------------------- 
Burger   BigMac  8 
Burger   Whopper  19 
Burger   Cheeseburger 4 
Drink   Coke   22 
Drink   Water   1 
Drink   Juice   7 
Side   Salad   8 
Side   Fries   19 

にはどうすれば各「質問についてhigestの回答」と「回答」を返すクエリを実行することができます'?私は何の問題higest「レスポンス」foreachの「質問」を取得するだけでなく、関連する「回答」に証明さを引き出していない

Question  | Answer  | Responses 
--------------------------------------- 
Burger   Whopper  19 
Drink   Coke   22 
Side   Fries   19 

:上記データのために私はのようなものを見てみたいと思います問題である。質問&最高の応答を得るために働くSQLは次のとおりです。

SELECT Question, MAX(Responses) FROM mytable GROUP BY Question; 

は誰もが私の式の最後の部分に任意の光を当てることができます - 関連の回答を示しますか?

私はこれを試してみました:

SELECT Question, Answer, MAX(Responses) FROM mytable GROUP BY Question; 

は、しかし、Postgresはその回答文BY集計またはGROUPに使用されていない文句を言います。あらかじめすべての質問を決めてから、質問ごとにSQLクエリを実行して、ほとんどの回答が得られる回答を見つけ出す必要がありますか?私はむしろこの不器用な道を踏み出すことはしませんが、それは私が推測するオプションです。

ありがとうございます!

+0

「Question」や「Responses」の欄に何が含まれているかわからないことを明確にする必要があります。 – rossp

答えて

4
SELECT 
    DISTINCT ON (question) 
    question, answer, responses 
FROM 
    mytable 
ORDER BY 
    question, responses DESC; 
+0

これはトリックでした、ありがとう! – rossp

2

これを行うための標準的な方法の1つは、ウィンドウ関数の使用です。残念ながら、これは8.4が必要ですが、あなたはそれを試すことができれば、このようなものは動作するはずです:

SELECT question, answer, responses 
FROM (
    SELECT question,answer,responses,row_number() 
    OVER (PARTITION BY question ORDER BY responses DESC) 
    FROM mytable 
) AS t 
WHERE row_number=1 
0
Select Answer 
From mytable, (Select Question, max(Responses) as maxres 
       From mytable 
       Group by Questions) as Temp 
Where mytable.Question = Temp.Question 
     and mytable.Responses = Temp.maxres 

注:の最大数がもっとそして1つの答えがあることができ、元の質問は下-specificiedです回答(質問ごと)。