2016-10-02 8 views
0

質問があります。ユーザーレビューで上位20人のユーザーが平均的な星を検索します。 、ランクAVGとLIMIT SQLの問題

レストラン(名)

(それがトリップアドバイザーでランクされましたか:ある下の20人のユーザー(少なくともexpereinced)

スキーマによって授与平均星とそれを比較彼らのランキング機能は何であるか知られていません)、

スコア(査読者が与えた平均星)

User_Nameの - レビューアの名前/別名

Review_Stars - このユーザーは、このRestuarantの

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

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

それが返されます:Iain U 60 4.3333

が、私は私のロジックは、私はこのことについてつもりな方法でオフにする必要がありだと思う私は、クエリを変更

Marcello... 464

Magorzata B 478

誰かが少し光を当てることができれば助けになるでしょう

答えて

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; 
+0

「DISTINCT」を削除する必要があります。なぜ、「GROUP BY」が必要なのでしょうか?あなたのクエリは、正しいデータを返すように見えます。私はちょうど興味がありますので、私が将来間違っていることを理解することができます。 – bkennedy

+0

'DISTINCT'はかなりダムです。基本的には、表示されているすべての行を取り、重複を無視します。一方、 'GROUP BY'は、指定された列に対して集約関数(この場合は' AVG')を実行することを許可します。MySQLは奇妙ですが、予期しない結果セットを返す可能性があるすべての列を入力する必要がないので、 – ESG

+0

私は20の人がほしいと思っていました。そんなことは意味がないのですか? – bkennedy