PostgreSQL如何合并两次查询为单条计算客户最近两笔销量总和
PostgreSQL单条合并查询实现方案
最终查询语句
SELECT partner_id, SUM(product_qty) AS 总和 FROM ( SELECT sl.partner_id, sl.product_qty, -- 按合作方ID分组,组内按订单时间倒序编号 ROW_NUMBER() OVER (PARTITION BY sl.partner_id ORDER BY sl.order_date DESC) AS row_num FROM trip_delivery_sales_lines sl WHERE sl.route_id = '152' AND sl.product_id = '432' -- 过滤第一段查询得到的合作方ID AND sl.partner_id IN ( SELECT partner_id FROM trip_delivery_sales ts WHERE ts.route_id = '152' GROUP BY ts.partner_id ) ) t WHERE row_num <= 2 -- 仅取每个合作方最近2笔订单 GROUP BY partner_id;
逻辑说明
- 内层子查询通过
IN条件关联第一段查询的结果,筛选出符合要求的所有partner_id对应的订单记录 - 窗口函数
ROW_NUMBER()实现按partner_id分组,每组内按order_date倒序排序,给每笔订单生成行号,保证时间最新的订单行号最小 - 外层过滤出行号小于等于2的记录,按partner_id分组求和product_qty,即可得到每个合作方最近两笔符合条件的销量总和
可选调整
- 如果需要输出
Mn2333 - 7格式的结果,将外层SELECT语句替换为:SELECT CONCAT(partner_id, ' - ', SUM(product_qty)) AS 结果即可 - 如果要求仅统计至少有2笔符合条件订单的合作方,可以在外层GROUP BY后添加条件:
HAVING COUNT(*) = 2 - 如果存在多笔订单order_date完全相同的场景,可将
ROW_NUMBER()替换为RANK()或DENSE_RANK(),调整同时间订单的计数规则
内容的提问来源于stack exchange,提问作者Shahal
相关产品推荐
相关产品推荐

