可以说,我有 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/

10-13 09:03