max(),group by和order by

时间:2011-06-09 20:14:01

标签: sql postgresql group-by sql-order-by max

我有以下SQL语句。

    SELECT t.client_id,max(t.points) AS "max" FROM sessions GROUP BY t.client_id;

它只是列出了客户端ID已达到的最大点数。现在我想按max(t.points)对结果进行排序。通常我会使用ORDER BY,但我不知道如何将它与组一起使用。我知道在以下子句中禁止使用SELECT列表中的值,因此在查询结束时添加ORDER BY max将不起作用。

如何在分组后对这些结果进行排序呢?

祝你好运

3 个答案:

答案 0 :(得分:7)

SELECT t.client_id, max(t.points) AS "max" 
FROM sessions t
GROUP BY t.client_id 
order by max(t.points) desc

答案 1 :(得分:1)

以下条款禁止SELECT列表中的值不正确。实际上,ORDER BYSELECT列表之后进行了逻辑处理,并且可以引用SELECT列表结果名称(与GROUP BY相反)。因此,编写查询的常规方法是

SELECT t.client_id, max(t.points) AS "max"
    FROM sessions
    GROUP BY t.client_id
    ORDER BY max;

这种表达方式是SQL-92,应该非常便携。另一种方法是按列号,例如,

    ORDER BY 2;

这是在SQL-92中执行此操作的唯一两种方法。

SQL:1999及更高版本也允许引用排序列表中的任意表达式,因此您可以执行ORDER BY max(t.points),但这显然更麻烦,并且可能不太便携。在SQL:1999中删除了按列号排序,因此它在技术上不再是标准,但可能仍然得到广泛支持。

答案 2 :(得分:0)

由于您已标记为 Postgres :Postgres允许非标准 GROUP BYORDER BY列号。你可以拥有

SELECT t.client_id, max(t.points) AS "max" 
FROM sessions t
GROUP BY 1 
order by 2 desc

解析后,这与RedFilter的解决方案相同。