Snowflake:SQL 编译错误:不是有效的 group by 表达式
Posted
技术标签:
【中文标题】Snowflake:SQL 编译错误:不是有效的 group by 表达式【英文标题】:Snowflake: SQL compilation error: not a valid group by expression 【发布时间】:2021-09-30 16:06:06 【问题描述】:我正在尝试在 case 语句中调用窗口函数,如下所示:
SELECT
DISTINCT properties.property_id
COALESCE(MAX(CASE
WHEN units_count.unit_type = 'NORMAL' THEN units_count.unit_count
END) OVER (PARTITION BY properties.property_id),
0)::INT AS normal_units_count
FROM units_count
JOIN properties ON units_count.property_id = properties.property_id
我收到以下错误:
SQL compilation error: [IFF(UNITS_COUNT.UNIT_TYPE = 'NORMAL', UNITS_COUNT.UNIT_COUNT, SYSTEM$NULL_TO_FIXED(null))] is not a valid group by expression
我尝试添加限定子句以删除 MAX()
函数:
SELECT
DISTINCT properties.property_id
COALESCE(CASE
WHEN units_count.unit_type = 'NORMAL' THEN units_count.unit_count
END OVER (PARTITION BY properties.property_id),
0)::INT AS normal_units_count
FROM units_count
JOIN properties ON units_count.property_id = properties.property_id
QUALIFY units_count.unit_count = MAX(units_count.unit_count) OVER (PARTITION BY properties.property_id)
代码执行,但限定子句导致对其他字段进行不必要的过滤。我可以保留现有逻辑(使用MAX()
)还是需要包含限定子句?
【问题讨论】:
您能否详细说明这一点:“...但是qualify 子句会导致对其他字段进行不必要的过滤。” 【参考方案1】:DISTINCT
实际上是一个分组操作,但您的 MAX 是一个带有 OVER
子句的每一行。
这意味着“基本 SQL”应该可以工作:
SELECT
p.property_id,
MAX(IFF(uc.unit_type = 'NORMAL', uc.unit_count, 0)) as v1 max_units_count
FROM units_count AS uc
JOIN properties AS p
ON uc.property_id = p.property_id
GROUP BY 1
但是由于您的“其他领域”意味着您正在选择其他事物并且不知道您在做什么/如何做,所以很难看到您想要做什么。
你的max(unit_count)
也不觉得它是一个 normal_unit_count。
但是您的示例需要在第二列中添加您想要执行的操作,以了解如何共同处理它们。但我倾向于使用零信息来建议您使用 CTE 来查找每个 property_id 和 MAX unit_count,然后将该结果加入到第二次读取数据中。因为对其他操作以及他们如何重用该读取的零洞察力,我已经体验到 GROUP/JOIN 然后 WINDOW(over partition)/ANYVALUE 更好。但这是另一种选择。
因此(未经测试)这可能有效:
SELECT
DISTINCT p.property_id
ANYVALUE(COALESCE(MAX(CASE
WHEN uc.unit_type = 'NORMAL' THEN uc.unit_count
END) OVER (PARTITION BY p.property_id),
0)::INT) AS normal_units_count
FROM units_count AS uc
JOIN properties AS p
ON uc.property_id = p.property_id
【讨论】:
以上是关于Snowflake:SQL 编译错误:不是有效的 group by 表达式的主要内容,如果未能解决你的问题,请参考以下文章
SQL 编译错误:无法在 Snowflake 中评估不受支持的子查询类型
将 CSV 文件从 S3 加载到 Snowflake 时出现 SQL 编译错误
SQL 编译错误:从 S3 复制到 Snowflake 时,JSON 文件格式只能生成一列类型变量或对象或数组
雪花; SQL 编译错误:无效的对象类型:GET_DDL 上的“EXTERNAL_TABLE”(“DATABASE”,“MyDb”)