Get Avg 与 count in group by SQL 子句一起工作
Get Avg to work together with count in group by SQL clause
我有一个 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
这非常有效,我得到了评论最多的项目列表。
但是,我还想显示此分数的 "average" 评分。
我可以轻松做到:
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 调用吗?
我觉得使用常用的table表达式可以帮你解决问题。下面写的是未经测试的代码,你或许可以按照同样的思路写一些东西。
;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
我有一个 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
这非常有效,我得到了评论最多的项目列表。
但是,我还想显示此分数的 "average" 评分。
我可以轻松做到:
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 调用吗?
我觉得使用常用的table表达式可以帮你解决问题。下面写的是未经测试的代码,你或许可以按照同样的思路写一些东西。
;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