【发布时间】: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 子句会导致对其他字段进行不必要的过滤。”
标签: sql snowflake-cloud-data-platform window-functions