通过SQL子句获取Avg与group in group一起使用

时间:2015-02-10 10:37:34

标签: sql sql-server group-by aggregate-functions

我有一个如下所示的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

但是这个有两个问题。

  • 计算错误(ahem)
  • 似乎删除了一些评论,因此计数不同

知道如何修复此SQL调用吗?

1 个答案:

答案 0 :(得分: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