SQLite如何将关联子查询语句改写为CTE(公用表表达式)实现
SQL子查询改写CTE实现方案
你提供的SQL可以直接将FROM后的子查询逻辑抽成CTE,关联逻辑不需要做任何调整,改写后的完整代码如下:
WITH customer_total_avg AS ( SELECT customer_id, AVG(total) AS total_avg FROM invoice GROUP BY customer_id ) SELECT c.last_name, c.first_name, ct.total_avg FROM customer AS c JOIN customer_total_avg AS ct ON c.customer_id = ct.customer_id;
改写说明
- 用
WITH关键字定义名为customer_total_avg的CTE临时结果集,内部逻辑和原语句中的子查询完全一致,保留了按客户ID分组计算平均消费的规则 - 主查询直接将CTE作为普通表和
customer表做内连接,关联条件和原写法完全相同,执行效率和原写法基本一致,CTE的优势是逻辑拆分更清晰,适合多层嵌套的复杂查询场景
内容的提问来源于stack exchange,提问作者giovanni sergi
相关产品推荐
相关产品推荐

