sql - 我可以在内部查询中定义别名并传递给外部查询吗?
问题描述
由于内部查询首先执行,我想我可以为表定义一个别名,如果它是同一个表,则将其传递给外部查询。所以我尝试了以下。
SELECT
station_id,
num_bikes_available,
(SELECT
AVG(num_bikes_available)
FROM
bigquery-public-data.new_yourk.citibike_stations AS stations
) AS avg_num_bikes_avlb
FROM
stations
不幸的是,它无法识别别名stations
。在这种情况下,有没有办法避免重复输入表名?
解决方案
不,做你想做的事的正确方法是使用窗口函数:
SELECT station_id, num_bikes_available,
AVG(num_bikes_available) OVER () AS avg_num_bikes_avlb
FROM `bigquery-public-data.new_yourk.citibike_stations` stations;
表别名表示表引用的特定实例。它不能用作读取表格的另一个实例。在任何情况下,相关子查询都是不必要的,而且成本更高。窗函数是这种计算的最佳方法。