2015-02-10 87 views
1

与计数一起工作组我有一个SQL子句如下所示:获取平均通过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调用?

+0

我认为你不能因为你有一个像1000行(前1000)的第一个SELECT语句组合在一两个选择语句,而第二个声明,是平均,你只有1行。将这两者结合起来肯定会给你一个错误的结果。 – Kim 2015-02-10 10:42:33

+0

或者除非你平均重复1000次是正常的。 – Kim 2015-02-10 10:44:27

+0

当group by时,列应该在GROUP BY中指定,或者在聚合函数(count,avg等)中指定参数! (如果两者都有,你会得到一个特定值的平均值,这就是具体的值......) – jarlh 2015-02-10 11:00:04

回答

0

我认为使用公用表表达式可以帮助您解决问题。下面写的是一个未经测试的代码,你可以写同样的东西。

;with cte 
as 
(
SELECT TOP 1000 ir.ItemID item_id, it.Title 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 
) 
select item_id, title, amount, avg(rating) from cte join ItemReviews ir 
on cte.item_id=ir.id 
group by item_id, title, amount 
order by amount