【发布时间】:2020-11-03 11:58:33
【问题描述】:
在 Snowflake 文档中,它列出了 Types Supported by Snowflake 支持的子查询类型:
- 在任何可以使用值表达式的地方出现不相关的标量子查询。
- WHERE 子句中的相关标量子查询。
- WHERE 子句中的 EXISTS、ANY / ALL 和 IN 子查询。这些 子查询可以是相关的或不相关的。
然而,在关于windows functions 的文档中(作为一个例子)它给出了这个运行没有错误的 SQL:
select branch_id,
net_profit as store_profit,
(select sum(net_profit) from store_sales as s2 where s2.city = s1.city) as city_profit,
store_profit / city_profit * 100 as store_percentage_of_city_profit
from store_sales as s1
order by branch_id;
据我了解:
- city_profit 由子查询定义,并且该子查询是相关的(它引用 S1)
- 关于允许的子查询的 3 条规则中的任何一条都不包含它(它不是不相关的,它不在 WHERE 子句中,也不是“WHERE 子句中的 EXISTS、ANY / ALL 和 IN 子查询”
因此,查询应该是无效的,但事实并非如此,我显然遗漏了一些东西。我误会了什么?
【问题讨论】:
标签: snowflake-cloud-data-platform