为什么 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;
我只是想知道,为什么:
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;