我有以下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将不起作用。
如何在分组后对这些结果进行排序呢?
祝你好运
答案 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 BY
在SELECT
列表之后进行了逻辑处理,并且可以引用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 BY
和ORDER BY
列号。你可以拥有
SELECT t.client_id, max(t.points) AS "max"
FROM sessions t
GROUP BY 1
order by 2 desc
解析后,这与RedFilter的解决方案相同。