【发布时间】:2015-02-10 10:37:33
【问题描述】:
我有一个如下所示的 SQL 子句:
SELECT TOP 1000 ir.ItemID, it.Title, count(ir.ItemID) as amount
FROM [eboghandel].[dbo].[ItemReviews] ir
LEFT JOIN Items it on ir.ItemID = it.ID
group by ItemID, it.Title
order by amount desc
这很好用,我得到了一个包含最多评论的项目列表。
不过,我还想显示这个分数的“平均”评分。
我可以轻松做到:
SELECT Avg(Rating) FROM ItemReviews WHERE ItemID = '5324181'
这将给出我的平均值,但我想将其与上一个查询结合起来。
我试过了:
SELECT TOP 1000 ir.ItemID, it.Title, count(ir.ItemID) as amount, avg(ir.Rating)
FROM [eboghandel].[dbo].[ItemReviews] ir
LEFT JOIN Items it on ir.ItemID = it.ID
group by ItemID, it.Title, ir.Rating
order by amount desc
但是这个有两个问题。
- 计算错误(咳咳)
- 似乎删除了一些评论,所以计数不同
知道如何修复这个 SQL 调用吗?
【问题讨论】:
-
我认为你不能将两者结合在一个 select 语句中,因为在你的第一个 select 语句中你有 1000 行(前 1000 行),而第二个语句是平均值,你只有 1 行。将两者结合起来肯定会给你一个错误的结果。
-
或者除非你可以平均重复 1000 次。
-
分组依据时,列应在 GROUP BY 中指定,或作为聚合函数的参数(count、avg 等)! (如果两者都有,您将获得特定值的平均值,即该特定值...)
标签: sql sql-server group-by aggregate-functions