0

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

「質問」ごとに最大の「回答」を含む「回答」を返すクエリを実行するにはどうすればよいですか? 上記のデータについては、次のようなものを見たいと思います。

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 は、Answer が集計または GROUP BY ステートメントで使用されていないと不満を漏らしています。事前にすべての質問を決定し、各質問に対して SQL クエリを実行して、最も多くの回答が得られる回答を見つけるだけでよいのでしょうか? この厄介な道をたどりたくないのですが、それはオプションだと思います。

ありがとう!

4

3 に答える 3

4
SELECT
    DISTINCT ON (question)
    question, answer, responses
FROM
    mytable
ORDER BY
    question, responses DESC;
于 2009-06-01T08:44:51.837 に答える
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
于 2009-06-01T10:04:14.903 に答える