【发布时间】:2013-11-05 06:52:23
【问题描述】:
我有一张看起来像这个调用者“makerar”的表
cname | wmname | avg
--------+-------------+------------------------
canada | zoro | 2.0000000000000000
spain | luffy | 1.00000000000000000000
spain | usopp | 5.0000000000000000
我想为每个 cname 选择最大 avg。
SELECT cname, wmname, MAX(avg) FROM makerar GROUP BY cname;
但我会得到一个错误,
ERROR: column "makerar.wmname" must appear in the GROUP BY clause or be used in an aggregate function
LINE 1: SELECT cname, wmname, MAX(avg) FROM makerar GROUP BY cname;
所以我这样做
SELECT cname, wmname, MAX(avg) FROM makerar GROUP BY cname, wmname;
但是这不会给出预期的结果,并且会显示下面的错误输出。
cname | wmname | max
--------+--------+------------------------
canada | zoro | 2.0000000000000000
spain | luffy | 1.00000000000000000000
spain | usopp | 5.0000000000000000
实际结果应该是
cname | wmname | max
--------+--------+------------------------
canada | zoro | 2.0000000000000000
spain | usopp | 5.0000000000000000
我该如何解决这个问题?
注意:此表是根据先前操作创建的 VIEW。
【问题讨论】:
-
我不明白。为什么是
wmname="usopp"而不是wmname="luffy"? -
@AndreKR 因为 (1, 5) 的最大值是 5,并且 5 与“usopp”相关联,而不是与“luffy”相关联。这是预期/期望的结果。
标签: sql group-by aggregate-functions postgresql-9.1