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

如何关联两个不同表的SELECT查询结果并按指定月份排序?

关联两个表的按月统计查询解决方案

没问题,我来帮你搞定这个需求!你需要把两个分别来自不同表的按月统计结果合并到一起,同时保留第一个查询的所有月份顺序,没有订单的月份显示0,用LEFT JOIN就能轻松实现。

最终SQL语句

SELECT 
    t1.Months,
    t1."Count Customer",
    NVL(t2."Order", 0) AS "Order"
FROM (
    -- 第一个查询:按月统计活跃客户数
    SELECT 
        TO_CHAR(Entry_date, 'MON.YYYY') AS Months, 
        COUNT(Customer_id) AS "Count Customer" 
    FROM table1 
    WHERE entry_date >= TO_DATE('01.01.1900', 'DD.MM.YYYY') 
      AND entry_date <= TO_DATE('31.12.2017', 'DD.MM.YYYY') 
      AND Customer_status = 'Active' 
    GROUP BY TO_CHAR(entry_date,'MON.YYYY') 
) t1
LEFT JOIN (
    -- 第二个查询:按月统计订单数
    SELECT 
        TO_CHAR(leave_date, 'MON.YYYY') AS Months,
        COUNT(order_id) AS "Order" 
    FROM table2 
    WHERE leave_date >= TO_DATE('01.01.1900', 'DD.MM.YYYY') 
      AND leave_date <= TO_DATE('31.12.2017', 'DD.MM.YYYY') 
    GROUP BY TO_CHAR(leave_date,'MON.YYYY')
) t2 ON t1.Months = t2.Months
ORDER BY to_date(t1.Months, 'MON.YYYY');

关键说明

  • LEFT JOIN的作用:以第一个子查询t1的月份为基准,确保所有t1里的月份都会被显示,哪怕t2里没有对应月份的订单数据。
  • NVL函数:把t2."Order"中的NULL值替换成0,完美匹配你期望的结果格式。
  • 排序逻辑:最后用t1.Months转换为日期来排序,保证和第一个查询的月份顺序完全一致。

这样执行后,就能得到你想要的如下格式结果:

Months | Count Customer | Order
Jan. 2017 | 15 | 0
Feb. 2017 | 1 | 8
Mar. 2017 | 30 | 10

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:50:46