2017-09-11 10 views
2

私は2つのテーブルを持っています:リストとレビュー。 私は状態に基づいている最高のレビューを持つリストを取得しようとします。だから私は、リストのすべてのレビューからAVGを取得し、リストをDESCする必要があります。SQL - 別のテーブルの数からAVGを取得

表の構造: リスト:id;タイトル;状態; ...

レビュー: id; listing_id;評価(1-5)

私はちょうどほとんどのレビューのDESCリストを解決することができましたが、今ではレビューの評価のAVGを取得しようとします。

SELECT *, 
     (SELECT COUNT(*) 
      FROM reviews rv 
     WHERE ls.id = rv.listing_id) Count 
    FROM listing ls 
WHERE ls.state ='$get_state' 
ORDER BY Count DESC 

サンプルデータ:IDリスト1

Listing: 

id title    State 
1 Hotel with nice view Arizona 
2 Hotel to stay  Arizona 

Review: 

id listing_id rating 
1 1   4(stars) 
2 1   4(stars) 
3 1   3(stars) 
4 2   5(stars) 

3件の口コミを持って、11月3日はレビューの合計スター値は= IDリスト2 3.6つ星

1件、総星を得ました5/1 = 5 stars

私は最初にリスト2を取得し、次にリスト1を取得する必要があります。 すべてをPHPページに表示したいと思います。

次は何ができますか?あなたはちょうどあなたが(浮動小数点または小数など)小数点以下の精度を得るために、MSSQL、CAST列の格付けを使用している場合、平均評価

SELECT ls.id, 
     title, 
     state, 
     ROUND(AVG(rating),2) avg_rating 
    FROM listing ls 
    JOIN review rv 
    ON ls.id = rv.listing_id 
WHERE ls.state = '$get_state' 
GROUP BY ls.id, 
      title, 
      state 
ORDER BY avg_rating DESC 

を取得するために、AVG()関数を使用することができ、ヘルプ

+0

サンプルデータを提供し、その結果が –

+0

@FerdinandGaspar行わ予想、感謝 – Lolipopkebab

+1

あなたが –

答えて

0

ため おかげ

ROUND(AVG(CAST(rating AS FLOAT)),2) avg_rating 
+0

ありがとう!滑らかに働いた! – Lolipopkebab

+0

私は別の問題を抱えています...レビューをロック解除するために電子メールを確認する必要がある機能を追加しました。ここでは、レビューテーブルにmail_approvedという名前の列があります。問題は、レビューのAVG評価をmail_approved = 1とするだけです。この句はどこで追加できますか?クエリ全体を再フォーマットする必要がありますか? ありがとうございます! – Lolipopkebab

関連する問題