AVG和LIMIT SQL的问题

时间:2016-10-02 21:52:43

标签: mysql

所以我被要求查找查询:查找前20位用户在用户评论中获得的平均星级(最有经验的)。将其与最低20位用户(最不受欢迎的)

授予的平均星级进行比较

架构是:

餐厅(姓名)

等级(如何按行程顾问排名,不知道他们的排名功能是什么!,它不仅仅是SCORE)

得分(评审员授予的平均星级)

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;

返回值:

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

我认为我的逻辑必须以我的方式解决,但是如果有人可以解决它会有所帮助

1 个答案:

答案 0 :(得分:1)

您缺少GROUP BY语句,可能要删除DISTINCT。你需要的东西是:

SELECT USER_NAME, USER_REVIEWS, AVG(REVIEW_STARS)
FROM TRIPADVISOR
GROUP BY USER_NAME, USER_REVIEWS
ORDER BY USER_REVIEWS desc
limit 20;