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

如何将两条不同Select查询的结果作为多列合并到同一条查询(不使用union)

解决方案

你可以直接使用条件聚合实现需求,仅扫描一次表即可得到所有字段结果,性能最优,完全不需要用到UNION:

SELECT 
    DATE(created_at) AS stat_date,
    COUNT(CASE WHEN status = 'Approved' THEN id END) AS lead,
    SUM(CASE WHEN status = 'Approved' THEN publisher_earned ELSE 0 END) AS earning,
    COUNT(id) AS clicks
FROM offer_process 
WHERE 
    publisher_id = '1738' 
    AND created_at >= '2021-08-01'
GROUP BY DATE(created_at)

逻辑说明

  • 按DATE(created_at)分组保证结果按天对齐,和你原有两个查询的分组逻辑完全一致
  • lead、earning两个字段仅统计status='Approved'的对应数据,和第一个原始查询逻辑完全匹配
  • clicks字段统计当前publisher、指定时间范围内的每日总记录数,和第二个原始查询逻辑完全匹配

如果后续你遇到两个查询的数据源来自不同表的场景,可以使用子查询关联的方案实现列合并:

SELECT 
    COALESCE(t1.stat_date, t2.stat_date) AS stat_date,
    COALESCE(t1.lead, 0) AS lead,
    COALESCE(t1.earning, 0) AS earning,
    COALESCE(t2.clicks, 0) AS clicks
FROM (
    SELECT 
        DATE(created_at) AS stat_date,
        COUNT(id) AS lead,
        SUM(publisher_earned) AS earning 
    FROM offer_process 
    WHERE 
        status='Approved'  
        AND publisher_id='1738' 
        AND created_at>='2021-08-01' 
    GROUP BY DATE(created_at)
) AS t1
FULL OUTER JOIN (
    SELECT 
        DATE(created_at) AS stat_date,
        COUNT(id) AS clicks 
    FROM offer_process  
    WHERE   
        publisher_id='1738'  
        AND created_at>='2021-08-01' 
    GROUP BY DATE(created_at)
) AS t2 ON t1.stat_date = t2.stat_date

使用FULL OUTER JOIN可以避免某一天只有点击没有有效转化、或者只有转化没有点击时的数据丢失问题。

内容的提问来源于stack exchange,提问作者Habib Ur Rehman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 23:15:04