我想知道主查询是否可以看到别名,这里有一个例子:
SELECT AVG(values)
FROM(
SELECT SUM(a1) AS values
FROM tableX
)
第一个查询是否看到别名";值";?
第一个查询是否看到别名"值";?
是的。子查询创建一个派生表,别名在该上下文中充当列名。但是,标准SQL要求为子查询提供一个别名。
因此:
SELECT AVG(vals)
FROM(
SELECT SUM(a1) AS vals
FROM tableX
) t --> alias of the subquery
旁注:
values
是一个语言关键字,因此不是列名的好选择;我在查询中将其重命名为vals
你的榜样真是做作;子查询总是返回一行,因此在外部查询中再次聚合没有什么意义:这保证返回与子查询相同的值。一个更有用的例子是在子查询中放入
group by
子句,就像一样
SELECT AVG(vals)
FROM(
SELECT SUM(a1) AS vals
FROM tableX
GROUP BY id
) t