我只是想知道,为什么:
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将其视为一个单独的列,如果名称与原始列相同,它会看到聚合函数并因此而产生错误?或者有人可以用更好的条款来解释。
答案 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;