在主查询中使用子查询的列别名作为 属性
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
我想知道主查询是否可以看到别名,这里有一个例子:
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