为什么 MAX(Column) as Column 会出错,而 MAX(Column) as max_Column 却不会?

Why does MAX(Column) as Column give error, and MAX(Column) as max_Column does not?

我只是想知道,为什么:

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

它给出一个错误并且

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

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

以上两个查询都没有报错

假设 table 的结构是,

create table my_table(
run_id int,
something varchar(10))

这个 table 有 100 个 run_id。

我知道您不能将 where 子句与聚合函数一起使用。

是否因为我们重命名该列(如 max_run_id)并且 sql 将其视为一个单独的列,如果名称与原始列相同,它会看到聚合函数并因此给出错误?或者谁能​​用更好的术语解释一下。

确实,这应该可以工作(并且它可以在其他 DBMS-s 中工作,例如 SQL Server、Oracle、MySQL 等)。您可以说这是 Sybase IQ 中的错误或(更准确地说)非标准实现。

似乎 Sybase IQ 允许在查询中的任何地方使用别名,因为 the documentation 说:“别名可以在整个查询中使用以表示别名表达式。[.. .] 如果您对列别名使用与列名相同的名称或表达式,则该名称将作为别名列处理,而不是 table 列名。

错误信息indicates"a SELECT statement cannot contain an aggregate function within a predicate in the WHERE clause"

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

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