因此我被要求查询查询:查找用户评论(最有经验)前20名用户评为平均星级。与底部20个用户评定的平均分(至少expereinced)问题与AVG和LIMIT SQL
的模式是比较:
餐厅(名称)
排名(它是如何通过旅行顾问排名,它不知道它们的排名功能是什么,它不只是评分),它不仅仅是评分)
得分(评论者授予的平均星级)
的User_Name - 审阅的名称/别名
Review_Stars - 这审阅了多少明星给该酒楼
Review_Date - 审查的日期
User_Reviews - 这位评论者给出的关于他/她的酒店/餐厅评论历史的评论总数量为
个User_Restaurant_Reviews - 相同的,但只是为餐馆
User_Helpful - 由其他审阅
所以我的逻辑是选择不同的USER_NAMES,他们的评论了多少的用户评论标记为有帮助,命令通过审查并将其限制为20.当我去添加AVG(REVIEW_STARS)
时,它完全改变了答案。
SELECT DISTINCT USER_NAME, USER_REVIEWS
FROM TRIPADVISOR
ORDER BY USER_REVIEWS desc
limit 20;
RETURNS:
Dorian C 1329
Scipion-Paris 1219
Waddler 1213
CJTravelerTexas 937
runner-oh... 828
maurowave 818
gabrielct... 720
AJCG 667
pietro r 652
Albia-Newton 651
Jilllian 650
laserkid 648
pstiva 616
lucaheat 585
Chokk 511
Soracte 491
viaggiatr... 487
tornado9 479
Magorzata B 478
Marcello... 464
当我查询更改为:
SELECT DISTINCT USER_NAME, USER_REVIEWS, AVG(REVIEW_STARS)
FROM TRIPADVISOR
ORDER BY USER_REVIEWS desc
limit 20;
它返回: Iain U 60 4.3333
我觉得我的逻辑必须在我要对这个办法是关闭但如果任何人可以摆脱一些光它会帮助
哇谢谢,我该如何去除'DISTINCT',为什么我需要'GROUP BY'?你的查询看起来正在返回正确的数据,我只是好奇,所以我可以意识到我将来做错了什么 – bkennedy
'DISTINCT'是非常愚蠢的。基本上采取所有显示的行并忽略重复。另一方面,'GROUP BY'允许在指定的列上执行聚合函数(在这种情况下为'AVG')。MySQL很奇怪,因为它不会强制你输入所有的列,这可能会返回一个意外的结果集 – ESG
我想我并不是真的想要任何重复,因为我只想要20个人。那么这没有意义吗? – bkennedy