PostgreSQL数据分析/聚合

PostgreSQL数据分析/聚合,postgresql,analysis,aggregation,Postgresql,Analysis,Aggregation,我在PostgreSQL中有一个表,其结构和数据如下: Question | Answer | Responses --------------------------------------- Burger BigMac 8 Burger Whopper 19 Burger Cheeseburger 4 Drink Coke 22 Drink

我在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;
然而,博士后抱怨说,答案并没有在聚合语句或分组语句中使用。我是否只需要事先确定所有问题,然后对每个问题执行SQL查询,以找到回答最多的答案?我不想走这条混乱的道路,但我想这是一个选择


谢谢

一种标准方法是使用窗口函数。不幸的是,这需要8.4,但如果您可以尝试,类似的内容应该可以:

SELECT
    DISTINCT ON (question)
    question, answer, responses
FROM
    mytable
ORDER BY
    question, responses DESC;
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

一种标准方法是使用窗口函数。不幸的是,这需要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
注意:原始问题未详细说明,因为可以有多个答案,最多回答(每个问题)


注意:原始问题未详细说明,因为可以有多个答案,最多回答(每个问题).

我应该澄清,我并不总是知道“问题”或“回答”栏中有什么内容——我只想看到每个问题都有最受欢迎的回答。我应该澄清,我并不总是知道“问题”或“回答”栏中有什么内容——我只想看到每个问题都有最受欢迎的回答。