Sql 为什么MAX(Column)as Column会给出错误,MAX(Column)as MAX_Column不会给出错误?

Sql 为什么MAX(Column)as Column会给出错误,MAX(Column)as MAX_Column不会给出错误?,sql,tsql,aggregate-functions,where-clause,sap-iq,Sql,Tsql,Aggregate Functions,Where Clause,Sap Iq,我只是想知道,为什么: 从run_id>50的my_表中选择max(run_id)作为run_id 它给出了一个错误和错误 从run_id>50的my_表中选择max(run_id)作为max_run_id 从run\u id>50的my\u表中选择max(run\u id) 以上两个查询没有给出错误 假设这个表的结构是 create table my_table( run_id int, something varchar(10)) 此表有100个运行id 我知道不能在聚合函数中使用wher

我只是想知道,为什么:

从run_id>50的my_表中选择max(run_id)作为run_id

它给出了一个错误和错误

从run_id>50的my_表中选择max(run_id)作为max_run_id

从run\u id>50的my\u表中选择max(run\u id)

以上两个查询没有给出错误

假设这个表的结构是

create table my_table(
run_id int,
something varchar(10))
此表有100个运行id

我知道不能在聚合函数中使用where子句

是因为我们重命名了该列(作为max_run_id),sql将其视为一个单独的列,如果名称与原始列相同,它会看到聚合函数并因此给出错误?或者有人可以用更好的术语来解释这一点。

事实上,这应该是可行的(它也适用于其他DBMS-s,如SQL Server、Oracle、MySQL等)。你可以说这是Sybase IQ中的一个bug,或者(更准确地说)是一个非标准实现

Sybase IQ似乎允许在查询中的任何位置使用别名,因为它说:“别名可以在整个查询中用于表示别名表达式。[…]如果对列别名使用与列名相同的名称或表达式,则该名称将被处理为别名列,而不是表列名

错误消息“SELECT语句不能在WHERE子句的谓词中包含聚合函数”

换句话说,Sybase IQ将您的查询理解为:

select max(run_id) as run_id from my_table where max(run_id) > 50;

你得到了什么错误…一个原因可能是你给出了与现有列相同的列名。你问题中的第一个查询应该运行时没有错误。错误消息是什么?它运行时没有任何错误,我不理解仇恨,这是一个合法的问题,我不知道为什么它没有在fiddle中给出错误。我正在使用Sybase IQ、 但是,这种语法是ansi sql,所以你使用什么数据库管理系统都不重要。这不是什么家庭作业……如果你不能解释,就忽略这篇文章,不要讨厌它。@theweeknd,我一回到家或有空就回答。这绝对是一个合法的问题。我怎么说。有时候社区很严厉,我建议不要强调谢谢,这正是我想知道的,很好的解释。如果可以的话,我会给你多张赞成票。对于下载这篇文章的其他人,学习如何成为一个社区,不要那么傲慢,仅仅因为你不知道如何解释某件事,这并不意味着这个问题是愚蠢的,它只是说明了如何你是无知的。