SQL(Snowflake)实操:将客户订阅统计查询改写为CTE格式的方法
CTE改写方案
你可以将订阅表的按客户维度统计逻辑抽为独立CTE,再和客户表关联即可完成改写,改写后的语句逻辑分层更清晰,可读性更高。
涉及表结构
表1:customers
- customer_id:每位客户的唯一ID
- full_name:客户全名
表2:subscriptions
- subscription_id:订阅服务的唯一ID
- customer_id:订阅对应服务的客户ID
- title:订阅服务名称
改写后SQL代码
WITH customer_subscription_stats AS ( SELECT customer_id, COUNT(*) AS subscriptions_count FROM subscriptions GROUP BY customer_id ) SELECT c.customer_id, c.full_name, -- 如果需要和原查询逻辑完全一致(无订阅客户返回NULL),直接使用csc.subscriptions_count即可 COALESCE(csc.subscriptions_count, 0) AS subscriptions_count FROM customers c LEFT JOIN customer_subscription_stats csc ON c.customer_id = csc.customer_id;
说明
上述写法新增的COALESCE函数用于将无订阅客户的统计结果从NULL转换为0,统计结果更符合业务常规需求,如果你需要完全对齐原语句的输出,直接删除COALESCE包裹即可。
内容的提问来源于stack exchange,提问作者John Thomas
相关产品推荐
相关产品推荐

