在 SQL 中编写常见的 Table 表达式(雪花)

Writing Common Table Expressions in SQL (Snowflake)

刚刚学习如何使用常用的 table 表达式,我希望我在门口就这样写。

我已经使用 WITH ... AS 将我数据库中的所有查询转换为 CTE 格式,但我正在努力解决这个问题。

所以有两个table:

Table 1. 客户

Table 2. 订阅

以下查询用于return您的每个客户有多少订阅:

SELECT c.customer_id, c.full_name,
(
SELECT COUNT(*)
FROM subscriptions s
WHERE s.customer_id = c.customer_id
GROUP BY s.customer_id
) subscriptions_count
FROM customers c

如何将其重写为通用 Table 表达式?

当然可以。您可以先计算聚合,然后加入 customers:

WITH cte AS (
    SELECT customer_id
         , COUNT(*) AS n
      FROM subscriptions
     GROUP BY customer_id
     )
SELECT c.*
     , COALESCE(cte.n, 0) AS n
  FROM      customers AS c
  LEFT JOIN cte
    ON c.customer_id = cte.customer_id
;

如果您真的想使用 CTE,这是一种方法。如果您希望向没有计数的客户显示

,您可以将其重写为使用 left join
with cte as

(select customer_id, count(*) as counts
from subscriptions
group by customer_id) 

select c.customer_id, c.full_name, s.counts
from customers c
join cte s on s.customer_id=c.customer_id;