質問があります。ユーザーレビューで上位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
「DISTINCT」を削除する必要があります。なぜ、「GROUP BY」が必要なのでしょうか?あなたのクエリは、正しいデータを返すように見えます。私はちょうど興味がありますので、私が将来間違っていることを理解することができます。 – bkennedy
'DISTINCT'はかなりダムです。基本的には、表示されているすべての行を取り、重複を無視します。一方、 'GROUP BY'は、指定された列に対して集約関数(この場合は' AVG')を実行することを許可します。MySQLは奇妙ですが、予期しない結果セットを返す可能性があるすべての列を入力する必要がないので、 – ESG
私は20の人がほしいと思っていました。そんなことは意味がないのですか? – bkennedy