首页 > 解决方案 > 如果列是 avg,Sql,我如何按 desc 或 asc 对行进行排序

问题描述

这是我的代码:

SELECT make, AVG(x)
FROM y  
GROUP BY make
ORDER BY AVG(x) DESC   <===== this is the part I'm stuck on
HAVING COUNT(x) > 0 
LIMIT 10

我正在尝试打印前 10 个 x。我已经将 10 设置为限制。

我遇到的问题是订单部分。每当我使用order by avg(x)时,它都不起作用。谁能解释原因并提供解决方案?

标签: sql

解决方案


SQL 中子句的顺序很重要。在您的情况下,正确的顺序是:

SELECT make, avg(x)
FROM y  
GROUP BY make
HAVING count(x) > 0 
ORDER BY avg(x) DESC
LIMIT 10;

HAVING追求GROUP BYORDER BY追求HAVING

请注意,您还可以编写ORDER BY使用列别名:

SELECT make, avg(x) as average
FROM y  
GROUP BY make
HAVING count(x) > 0 
ORDER BY average DESC
LIMIT 10;

推荐阅读