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

如何合并两个SQL查询?获取客户单产品订购量及产品总订购量

合并查询实现客户订购量与产品总订购次数同屏展示

没问题,你可以通过两种常用方式实现这个需求,我给你详细说明:

方法一:使用窗口函数(推荐,更简洁高效)

窗口函数可以在不额外关联表的情况下,直接计算每个产品的总订购次数,和客户的订购数放在同一结果集中:

SELECT 
    C.CustomerID,
    P.ProductName,
    COUNT(*) AS CustomerOrdered, -- 单个客户对该产品的订购次数
    COUNT(*) OVER (PARTITION BY P.ProductName) AS TotalOrdered -- 该产品的总订购次数
FROM Customers AS C
JOIN Orders AS O ON C.CustomerID = O.CustomerID
JOIN [Order Details] AS OD ON O.OrderID = OD.OrderID
JOIN Products AS P ON OD.ProductID = P.ProductID
GROUP BY C.CustomerID, P.ProductName

说明

COUNT(*) OVER (PARTITION BY P.ProductName) 这个窗口函数会按照产品名称分组,计算每个产品在所有订单中的总订购次数,直接嵌入到你的第一个查询里,不需要额外的表关联,执行效率更高。

方法二:使用子查询关联

如果你更习惯用子查询的方式,也可以把你原来的两个查询分别作为子查询,通过产品名称关联起来:

SELECT 
    CustProd.CustomerID,
    CustProd.ProductName,
    CustProd.Ordered AS CustomerOrdered, -- 单个客户的订购次数
    TotalProd.Ordered AS TotalOrdered -- 产品总订购次数
FROM (
    -- 子查询1:获取每个客户对各产品的订购次数
    SELECT 
        C.CustomerID,
        P.ProductName,
        COUNT(*) AS Ordered
    FROM Customers AS C
    JOIN Orders AS O ON C.CustomerID = O.CustomerID
    JOIN [Order Details] AS OD ON O.OrderID = OD.OrderID
    JOIN Products AS P ON OD.ProductID = P.ProductID
    GROUP BY C.CustomerID, P.ProductName
) AS CustProd
JOIN (
    -- 子查询2:获取每个产品的总订购次数
    SELECT 
        P.ProductName,
        COUNT(*) AS Ordered
    FROM Products AS P
    JOIN [Order Details] AS OD ON P.ProductID = OD.ProductID
    GROUP BY P.ProductName
) AS TotalProd ON CustProd.ProductName = TotalProd.ProductName

说明

这个方法就是把你已经写好的两个查询封装成子查询,然后通过ProductName字段关联,将两个结果集的对应数据合并到同一行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:14:36