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

一种标准方法是使用窗口函数。不幸的是,这需要 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 回答
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

注意:原始问题没有具体说明,因为最多可以有一个答案(每个问题)。

于 2017-08-10T18:01:35.423 回答