Sql 为什么您可以按“as”语句排序,但不能按“as”语句分组

Sql 为什么您可以按“as”语句排序,但不能按“as”语句分组,sql,Sql,它显示了dt的一个错误。不能按列别名as语句分组的原因是SQL查询部分的执行顺序不允许这样做。GROUPBY子句在SELECT之前执行,因此它无法访问列别名,因为它们尚未创建。ORDER BY在SELECT之后执行,因此别名可用 这已经被问到了,这里有一个答案: 此外,可以在此处找到更多信息:您可以使用子查询进行查询 Select Substr(creationtime,0,10) as dt, Count(1) as num From comment Group by dt Order by

它显示了dt的一个错误。不能按列别名as语句分组的原因是SQL查询部分的执行顺序不允许这样做。GROUPBY子句在SELECT之前执行,因此它无法访问列别名,因为它们尚未创建。ORDER BY在SELECT之后执行,因此别名可用

这已经被问到了,这里有一个答案:


此外,可以在此处找到更多信息:

您可以使用子查询进行查询

Select
Substr(creationtime,0,10) as dt,
Count(1) as num
From comment
Group by dt 
Order by num desc

逻辑查询处理顺序就是这个问题的答案

Select
c2.dt as dt,
c2.num as num
From comment c1
INNER JOIN (SELECT Substr(creationtime,0,10) as dt, Count(1) as num) c2 ON c2.ID = c1.ID
Group by c2.dt
Order by num desc
别名“as”将在选择发生时分配,但按照逻辑处理顺序,在选择之前分组。因此,GROUP BY不知道您提供的别名。 但选择后按工作顺序订购。所以ORDER BY知道您提供的别名

希望你现在明白了

因此,按照逻辑处理顺序,实际查询可以如下:

FROM clause
JOIN clause,ON clause,APPLY clause
WHERE clause
GROUP BY clause and AGGREGATE Functions
CUBE | ROLLUP | GROUPING SETS
HAVING clause
SELECT clause,UNION clause
DISTINCT clause
ORDER BY clause
TOP clause
OFFSET/FETCH
FOR XML 
还为ref添加了physicalwriting查询过程顺序

Select
Substr(creationtime,0,10) as dt,
Count(1) as num
From comment
Group by (Substr(creationtime,0,10)) 
Order by num desc

替换为group by Substrcreationtime,0,10。您不能在groupby clauseWell中使用别名,您可以对某些数据库(如MySQL)使用该语法。你的数据库是什么?用SQL语言设计的。另一方面,可以使用完全相同的表达式。。
SELECT 
DISTINCT 
<column-list>
FROM 
<left_table>
<join_type> 
JOIN 
<right_table>
ON 
<join_condition>
WHERE 
<where_condition>
GROUP BY 
<group_by_list>
HAVING 
<having_condition>
ORDER BY 
<order_by_list>