为什么MAX(列)作为列给出错误,而MAX(列)作为max_Column不给出错误?

时间:2015-06-26 06:56:59

标签: sql tsql aggregate-functions where-clause sybase-iq

我只是想知道,为什么:

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;

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

上述两个查询不会出错。

让我们说表的结构是,

{{1}}

此表有100个run_id。

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

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

1 个答案:

答案 0 :(得分:1)

实际上,这应该可行(并且它适用于其他DBMS,如SQL Server,Oracle,MySQL等)。您可以说这是Sybase IQ中的错误或(更准确地说)非标准实现。

似乎Sybase IQ允许在查询中的任何位置使用别名,因为the documentation说:“alias-names可以在整个查询中用于表示别名表达式。[...]如果你使用与列名别相同的名称或表达式作为列名称,名称将作为别名列处理,而不是表列名称。

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

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

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