You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL优化:如何将两段关联SQL合并JOIN逻辑改写为单个查询

合并CTE后的优化查询方案

你可以直接将第一个CTE的逻辑改写为第二个查询LEFT JOIN的内联子查询,不需要拆分两层CTE,合并后的完整代码如下:

SELECT 
    is_current_period,
    start_date,
    end_date,
    coalesce(sum(streeteasy_page_views), 0) AS streeteasy_page_views,
    coalesce(sum(trulia_page_views), 0)     AS trulia_page_views,
    coalesce(sum(zillow_page_views), 0)     AS zillow_page_views,
    coalesce(sum(realtor_page_views), 0)    AS realtor_page_views
FROM periods
LEFT JOIN (
    SELECT 
        clv.date,
        clv.streeteasy_page_views,
        clv.trulia_page_views,
        clv.zillow_page_views,
        clv.realtor_page_views
    FROM agent_insights_lt.agent_insights__combined_listing_views AS clv
    INNER JOIN listing_info_raw
        ON clv.property_id_sha = listing_info_raw.property_id_sha
) AS other_publisher_views 
ON other_publisher_views.date BETWEEN periods.start_date AND periods.end_date
-- 原代码缺失聚合分组逻辑,按你的需求需要补充该语句
GROUP BY is_current_period, start_date, end_date

优化说明

  • 原两层CTE的逻辑完全可以合并为单层查询,减少SQL解析成本,同时代码层级更清晰易读
  • 补充了原代码遗漏的GROUP BY子句,否则按周期统计的聚合逻辑会报错或得到错误结果
  • 如果你的数据库支持谓词下推,该写法还会自动将日期过滤条件下推到子查询中,进一步减少扫描的数据量,提升执行效率

内容的提问来源于stack exchange,提问作者Pink Boy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 10:06:04