CTE 拆解查询步骤
先计算每个客户的已支付金额,再从这个命名结果中筛选。
常见做法写多层嵌套子查询,或建立临时表再查询。
注意事项
官方依据 ↗核对于 2026-10-06CTE 是语句内的命名结果,不保证物化或提速;MySQL 8.0 开始支持 WITH,不能直接用于 5.7。
SQL
WITH paid_totals AS (
SELECT customer_id, SUM(amount) AS total
FROM orders WHERE status = 'paid'
GROUP BY customer_id
)
SELECT customer_id, total
FROM paid_totals
WHERE total >= 150
ORDER BY customer_id;示例结果
| customer_id | total |
|---|---|
| 1 | 200.00 |
| 3 | 150.00 |
动手练习
把客户名称加入最终结果。
查看参考答案 +
在最终查询中 JOIN customers,使用 paid_totals.customer_id = customers.id。