Sql 在使用NORTHWND计算每个产品类别的总订单时,无法使用公共表表达式
伙计们,作为我作为一名数据支持分析师工作的一部分,我正在接受培训,准备成为一名软件开发人员。我的导师给了我一组测试声明,这一条似乎比我以前做过的任何事情都要先进。问题是 * 6) 编写子查询或公共表表达式以计算总计 每个产品类别的订单。这将编写一个查询,该查询将 带回每种产品的名称,以及该产品的订单总数 product并连接到子查询或CTE以计算百分比 该产品代表其产品类别的销售额。例如 如果肥皂类别有2种产品;蓝色汤和红色肥皂,蓝色汤 有40份订单,红色肥皂有10份订单,我希望看到 以下行:产品名称总订单占红色类别的百分比 肥皂40 80%Sql 在使用NORTHWND计算每个产品类别的总订单时,无法使用公共表表达式,sql,sql-server,tsql,aggregate-functions,common-table-expression,Sql,Sql Server,Tsql,Aggregate Functions,Common Table Expression,伙计们,作为我作为一名数据支持分析师工作的一部分,我正在接受培训,准备成为一名软件开发人员。我的导师给了我一组测试声明,这一条似乎比我以前做过的任何事情都要先进。问题是 * 6) 编写子查询或公共表表达式以计算总计 每个产品类别的订单。这将编写一个查询,该查询将 带回每种产品的名称,以及该产品的订单总数 product并连接到子查询或CTE以计算百分比 该产品代表其产品类别的销售额。例如 如果肥皂类别有2种产品;蓝色汤和红色肥皂,蓝色汤 有40份订单,红色肥皂有10份订单,我希望看到 以下行:产
蓝色肥皂10.20% * 到目前为止,我已经设法做到了以下几点,但我正在努力克服这一点
;WITH [Products] (CategoryId, TotalNumberOfOrders)
AS (
SELECT p.CategoryId,
COUNT (OD.OrderID) as TotalNumberOfOrders
FROM [dbo].[Products] p
INNER JOIN [dbo].[Order Details] OD
ON p.ProductID=OD.ProductID
GROUP BY p.CategoryId )
SELECT * From Products
任何帮助都会很棒!(顺便说一句,我正在使用NORTHWND数据库)我想你需要的是
;WITH temp AS
(
SELECT p.CategoryId,
COUNT (DISTINCT OD.OrderID) as TotalNumberOfOrders
FROM [dbo].[Products] p
INNER JOIN [dbo].[Order Details] OD ON p.ProductID=OD.ProductID
GROUP BY p.CategoryId
)
SELECT p.ProductName,
Count(DISTINCT Od.OrderId) AS Total,
Count(DISTINCT Od.OrderId)*100/temp.TotalNumberOfOrders AS Percentage
FROM Products p
INNER JOIN [dbo].[Order Details] OD ON p.ProductId = OD.ProductId
INNER JOIN temp ON p.CategoryId = temp.CategoryId
GROUP BY p.ProductId, p.ProductName, temp.TotalNumberOfOrders
记住Count(Distinct..)
使用子查询对订单进行计数:
SELECT P.ProductName,
COUNT(OrderID) AS NumberOfOrders,
CAST((CAST(COUNT(OrderID) AS DECIMAL(9,2)) / CAST(Derived_Table.CNT AS
DECIMAL(9,2))) * 100 AS DECIMAL(9,2)) AS Percentage
FROM [Northwind].[dbo].[Order Details]
INNER JOIN dbo.Products AS P
ON [Order Details].ProductID = P.ProductID
INNER JOIN (SELECT COUNT(F.OrderID) AS CNT, P.CategoryID
FROM [Northwind].[dbo].[Order Details] F
INNER JOIN dbo.Products P
ON F.ProductID = P.ProductID
GROUP BY P.CategoryID) AS Derived_Table
ON P.CategoryID = Derived_Table.CategoryID
GROUP BY [Order Details].ProductID, P.ProductName, Derived_Table.CNT
ORDER BY [Order Details].ProductID