按客户订单和每个订单的商品对客户进行排名

时间:2018-05-02 15:34:33

标签: sql-server tsql

我试图通过一个计数而不是一个计数对查询进行排名。

我想按订单的订单项对客户进行排名。

WITH CTE AS
(
    SELECT 
        o.CustomerId,
        COUNT(DISTINCT o.OrderId) AS OrderCount, 
        COUNT(oi.OrderItemId) AS OrderItemCount
    FROM 
        OrderItem oi
    INNER JOIN 
        Order o ON o.OrderId = oi.OrderId
    WHERE 
        o.CategoryId = 52 -- website sales
    GROUP BY 
        o.CustomerId
)
SELECT 
    cust.Code, 
    cust.DisplayTitle,
    CTE.OrderCount,
    CTE.OrderItemCount,
    --AVG(CTE.OrderItemCount/CTE.OrderCount) AS SumProduct ????
FROM 
    CTE
INNER JOIN 
    Customer cust ON cust.CustomerId = CTE.CustomerId
GROUP BY 
    cust.Code, 
    cust.DisplayTitle,
    CTE.OrderCount,
    CTE.OrderItemCount
ORDER BY 
    SumProduct DESC

我基本上试图在Excel中实现等效于SUMPRODUCT()的T-SQL。

1 个答案:

答案 0 :(得分:1)

SELECT 
    o.CustomerId,
    COUNT(DISTINCT o.OrderId) AS OrderCount, 
    COUNT(oi.OrderItemId) AS OrderItemCount,
    COUNT(oi.OrderItemId) / COUNT(DISTINCT o.OrderId) avg 
FROM OrderItem oi
INNER JOIN Order o ON o.OrderId = oi.OrderId
WHERE o.CategoryId = 52 -- website sales
GROUP BY o.CustomerId 
order by COUNT(oi.OrderItemId) / COUNT(DISTINCT o.OrderId) desc

只需将加入添加到客户

即可