Sql 找出2012年平均标准成本最高的五个产品组(起始日期为2012年)
这是我想出来的,但我无法理解。得到错误的是我的子查询。请帮忙Sql 找出2012年平均标准成本最高的五个产品组(起始日期为2012年),sql,sql-server-2012,average,Sql,Sql Server 2012,Average,这是我想出来的,但我无法理解。得到错误的是我的子查询。请帮忙 SELECT SUBSTRING(P.Name, 1, CHARINDEX('1',P.Name)) AS ProductGroups FROM Product P JOIN ProductCostHistory PCH ON ( PCH.ProductID = P.ProductID ) WHERE ( SELECT TOP (5) AVG(PCH.StandardCost) FROM ProductCostHis
SELECT SUBSTRING(P.Name, 1, CHARINDEX('1',P.Name)) AS ProductGroups
FROM Product P
JOIN ProductCostHistory PCH ON ( PCH.ProductID = P.ProductID )
WHERE (
SELECT TOP (5) AVG(PCH.StandardCost)
FROM ProductCostHistory PCH
WHERE StartDate = 2012
);
不是100%清楚,但下面的内容应该可以让你接近 子查询按ProductID提取前5名的平均成本,然后将其加入到产品表中。您的子查询缺少一个GROUP BY,因此它将是所有产品的平均值,而不是按产品的平均值,它还缺少ORDER BY,因此它将给出它计算的前5个产品,而不是最高的5个
SELECT SUBSTRING(P.Name, 1, CHARINDEX('1',P.Name)) AS ProductGroups, q.ProductID,.q.AvgCost
FROM Product P
INNER JOIN (
SELECT TOP (5) PCH.ProductID, AVG(PCH.StandardCost) As AvgCost
FROM ProductCostHistory PCH
WHERE PCH.StartDate = 2012
GROUP BY PCH.ProductID
ORDER BY AVG(PCH.StandardCost) Desc
) As q ON (p.ProductID = q.ProductID)
当您使用SQL Server 2012时,您可以使用“按平均标准成本排序”的行数分析功能,并返回前5名产品
With CTE as
(
SELECT productid ,
Avg(standardcost) as avgCost,
Row_number() over ( partition by productid order by avg(standard cost) desc) as rn
FROM ProductCostHistory WHERE StartDate = 2012
Group by productid
)
SELECT SUBSTRING(P.Name, 1, CHARINDEX('1',P.Name)) AS ProductGroups,
CTE.avgCost
FROM Product P
JOIN Cte
On CTE.productid = p.productid
And CTE.rn <= 5
嘿,伙计们,在修改Simon发布的内容后,我得到了结果!我只是想感谢所有帮助过我的人
SELECT TOP 5 (substring(P.Name, 1, CHARINDEX(' ',P.Name))) AS ProductGroups,AVG(PCH.StandardCost) AS AverageStandardCost,P.ProductID AS ProductID
FROM Product P
INNER JOIN ProductCostHistory PCH ON (PCH.ProductID = P.ProductID)
WHERE PCH.StartDate
LIKE '%2012%'
GROUP BY P.Name, P.ProductID
ORDER BY AVG(PCH.StandardCost) DESC
如果你同意,请告诉我 你想干什么?WHERE子句没有任何作用,因为它没有谓词,只有一个表表达式。那里应该有某种表达式,其计算结果为真或假。此外,您的子查询只返回一行,因为它没有按任何内容分组,所以前5名也没有做任何事情。Mike,我如何找到标准成本最高的前5名组的平均值。这就是我真正困惑的地方。对不起,我是sql新手,所以我学习得很慢……您的StartDate列是什么类型的?是sql 2008还是sql 20082012@rdubya-时间到了。谢谢你的反馈,西蒙。我想我知道该怎么做了。我一弄明白就把答案贴出来!非常感谢你的帮助!