可以说,我有 Product 和 Score 表。
Product
-------
id
name
Score
-----
id
ProductId
ScoreValue
我想获得 AVERAGE 得分最高的前 10 个产品,如何获得平均值并在一个 select 语句中选择前 10 个产品?
这是我的,它选择了意外的行
SELECT TOP 10 Product.ProductName Score.Score
FROM Product, Score
WHERE Product.ID IN (select top 100 productid
from score
group by productid
order by sum(score) desc)
order by Score.Score desc
最佳答案
试试这个,
WITH records
AS
(
SELECT a.ID, a.Name, AVG(b.ScoreValue) avg_score,
DENSE_RANK() OVER (ORDER BY AVG(b.ScoreValue) DESC) rn
FROM Product a
INNER JOIN Score b
ON a.ID = b.ProductID
GROUP BY a.ID, a.Name
)
SELECT ID, Name, Avg_Score
FROM records
WHERE rn <= 10
ORDER BY avg_score DESC
我不使用
TOP
的原因是它不会处理具有最高平均值的重复记录。但是您可以改用 TOP WITH TIES
。关于sql - 选择平均分最高的前10名,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16214205/