在主查询中使用子查询的列别名作为 属性

using subquery's column alias as a property in main query

我想知道主查询是否可以看到别名,这里有一个例子:

SELECT AVG(values)
FROM(
  SELECT SUM(a1) AS values
  FROM tableX
)

第一个查询是否看到别名“values”?

Does the first query see the alias "values"?

是的,确实如此。子查询创建一个 derived table,别名在该上下文中充当列名。但是,标准 SQL 要求您为子查询提供别名。

所以:

SELECT AVG(vals)
FROM(
    SELECT SUM(a1) AS vals
    FROM tableX
) t --> alias of the subquery

旁注:

  • values 是语言关键字,因此不是列名的好选择;我在查询

    中将其重命名为vals
  • 你的例子真的很做作;子查询总是 return 一行,因此在外部查询中再次聚合没有什么意义:这保证 return 与子查询的值相同。一个更有用的例子是在子查询中放置一个 group by 子句,例如

SELECT AVG(vals)
FROM(
    SELECT SUM(a1) AS vals
    FROM tableX
    GROUP BY id
) t