繁体   English   中英

从每个产品类别购买的客户; 在 SQL 服务器项目中,他们平均购买了多少种产品?

[英]Customers who shop from each product category; how many product categories did they shop on average in SQL Server project?

这就是我到目前为止所做的。我想找出答案; 从每个产品类别购买的客户; 他们平均购买了多少种产品? 有人可以完成该项目或给我提示。 提前致谢

这是必须看的 output在此处输入图片描述

SELECT CategoriesAndCustomers.CategoryName,
       CategoriesAndCustomers.CustomerID,
       CustomersAndTotalCategoryCount.TotalCategoryCount,
       COUNT(CustomersAndTotalCategoryCount.TotalCategoryCount)
FROM (SELECT PC.[Name] AS CategoryName,
             SOH.CustomerID
      FROM [AdventureWorks2017].[Sales].[SalesOrderHeader] SOH
           LEFT JOIN [AdventureWorks2017].[Sales].[SalesOrderDetail] SOD ON SOH.[SalesOrderID] = SOD.[SalesOrderID]
           LEFT JOIN [AdventureWorks2017].[Production].[Product] P ON SOD.ProductID = P.ProductID
           LEFT JOIN [AdventureWorks2017].[Production].[ProductSubcategory] PSC ON PSC.ProductSubcategoryID = P.ProductSubcategoryID
           LEFT JOIN [AdventureWorks2017].[Production].[ProductCategory] PC ON PC.ProductCategoryID = PSC.ProductCategoryID
--WHERE PC.[Name] = 'Accessories' --AND CustomerId = 29610
) CategoriesAndCustomers
     LEFT JOIN (SELECT SOH.CustomerID,
                       COUNT(PC.[Name]) AS TotalCategoryCount
                FROM [AdventureWorks2017].[Sales].[SalesOrderHeader] SOH
                     LEFT JOIN [AdventureWorks2017].[Sales].[SalesOrderDetail] SOD ON SOH.[SalesOrderID] = SOD.[SalesOrderID]
                     LEFT JOIN [AdventureWorks2017].[Production].[Product] P ON SOD.ProductID = P.ProductID
                     LEFT JOIN [AdventureWorks2017].[Production].[ProductSubcategory] PSC ON PSC.ProductSubcategoryID = P.ProductSubcategoryID
                     LEFT JOIN [AdventureWorks2017].[Production].[ProductCategory] PC ON PC.ProductCategoryID = PSC.ProductCategoryID
                --WHERE PC.[Name] = 'Accessories' --AND CustomerId = 29610
                GROUP BY SOH.CustomerID) CustomersAndTotalCategoryCount ON CategoriesAndCustomers.CustomerID = CustomersAndTotalCategoryCount.CustomerID
--WHERE CategoriesAndCustomers.CustomerID=11001
GROUP BY CategoriesAndCustomers.CategoryName,
         CategoriesAndCustomers.CustomerID,
         CustomersAndTotalCategoryCount.TotalCategoryCount
ORDER BY CategoriesAndCustomers.CategoryName;

您能否用预期的 output 详细说明您的问题? 目前尚不清楚您为什么首先使用 left join 以及您真正想要计算的是什么?

这些将是一团糟的评论:

SELECT
      SOH.CustomerID
    , PSC.ProductCategoryID
    , COUNT(*)  AS CountPerCategory
FROM  [Sales].[SalesOrderHeader]                   SOH
      INNER JOIN [Sales].[SalesOrderDetail]        SOD ON SOH.[SalesOrderID]=SOD.[SalesOrderID]
      INNER JOIN [Production].[Product]            P ON SOD.ProductID=P.ProductID
      INNER JOIN [Production].[ProductSubcategory] PSC ON PSC.ProductSubcategoryID=P.ProductSubcategoryID
      INNER JOIN [Production].[ProductCategory]    PC ON PC.ProductCategoryID=PSC.ProductCategoryID
GROUP BY SOH.CustomerID, PSC.ProductCategoryID;

SELECT SOH.CustomerID
     , PSC.ProductCategoryID
--     , PSC.ProductSubcategoryID
     , COUNT(*) AS Counts
      FROM [Sales].[SalesOrderHeader] SOH
           inner JOIN [Sales].[SalesOrderDetail] SOD ON SOH.[SalesOrderID] = SOD.[SalesOrderID]
           inner JOIN [Production].[Product] P ON SOD.ProductID = P.ProductID
           inner JOIN [Production].[ProductSubcategory] PSC ON PSC.ProductSubcategoryID = P.ProductSubcategoryID
           inner JOIN [Production].[ProductCategory] PC ON PC.ProductCategoryID = PSC.ProductCategoryID
GROUP BY SOH.CustomerID, PSC.ProductCategoryID
--, PSC.ProductSubcategoryID
WITH ROLLUP;

编辑:平均:

SELECT AVG(CAST(tmp.CountOfCategories AS DECIMAL)) AS AverageCategories
FROM (
SELECT
      SOH.CustomerID
    , COUNT(DISTINCT PSC.ProductCategoryID)  AS CountOfCategories
FROM  [Sales].[SalesOrderHeader]                   SOH
      INNER JOIN [Sales].[SalesOrderDetail]        SOD ON SOH.[SalesOrderID]=SOD.[SalesOrderID]
      INNER JOIN [Production].[Product]            P ON SOD.ProductID=P.ProductID
      INNER JOIN [Production].[ProductSubcategory] PSC ON PSC.ProductSubcategoryID=P.ProductSubcategoryID
      INNER JOIN [Production].[ProductCategory]    PC ON PC.ProductCategoryID=PSC.ProductCategoryID
GROUP BY SOH.CustomerID
) tmp;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM