SQL错误:标识符无效

SQL错误:标识符无效,sql,Sql,我是一名SQL新手,非常感谢您在这个相当基本的问题上给予我帮助 select comp_table.* from (select column_1,avg(column_2) as "avg" from table_1, group by column_1) comp_table → 返回名为column_1和avg2列的正确记录 但如果我改为: select comp_table.avg from (select column_1,avg(column_2) as "avg"

我是一名SQL新手,非常感谢您在这个相当基本的问题上给予我帮助

select comp_table.*
from (select column_1,avg(column_2) as "avg"
      from table_1, group by column_1) comp_table
→ 返回名为
column_1
avg
2列的正确记录

但如果我改为:

select comp_table.avg
from (select column_1,avg(column_2) as "avg"
      from table_1, group by column_1) comp_table
→ 返回错误:无效标识符“avg”

问题是我只需要选择
avg
列,所以我不能
select comp_table.*
。你们能帮忙吗


另外,如果您能为查询提供一些调优技巧,那将非常棒。

我不知道您使用的是哪种DBMS,但有些人会因为您使用的是
.avg
(因为
avg
是保留的)而感到不安,并要求您避开它

尝试将其从
avg
更改为
average
,就像测试一样:

SELECT comp_table.average
FROM (SELECT column_1, avg(column_2) as average
      FROM table_1, GROUP BY column_1) comp_table

您使用的是什么数据库服务器
AVG
是我所知道的所有函数中的内置函数,因此您需要正确地转义它-这取决于数据库服务器。在MS SQL Server中,如果列名不包含在“双引号”中,则名称将规范化为大写;因此,您要求的是“AVG”列,而实际上该列的名称是“AVG”:


那么错误可能是AVG函数缺少一个参数。在alias use表的顶部…那么错误可能是AVG函数缺少一个参数。在表别名的使用上…TSQL是我所知道的唯一一个支持方括号来转义表、列和别名的名称,正如Emtucifor所指出的--SQL Server不会有这个问题。听起来像是…事实上,只有当我想用我的母语命名列标识符时,我才对它们进行双引号引用,否则我就不使用它们了“按原样”。最好不要使用与oracle函数名(如sum或avg)匹配的标识符,以避免可能的混淆。在PostgreSQL中,将列名括在双引号中可区分大小写,即“myColumn”不同于“myColumn”“。我不知道其他数据库是否也一样。在Oracle中,有点不同。所有列都是使用双引号指定的(从某种意义上讲),只是它们给了我们一条捷径,这意味着如果列只包含大写字母和/或下划线字符,我们可以省略双引号。但是,在Oracle中,通常只使用非引号语法来命名列。
select comp_table."avg"
from (select column_1,avg(column_2) as "avg"
  from table_1, group by column_1) comp_table