2016-11-03 14 views
1

テーブルのアパートよりも大きな評価を持つ名を表示するクエリを見つける>トラブル与えられた値

apartment_id || apartment_name || status 
============================== 
1       joys    active 
5       harrys    active 
10      tols    active 

テーブルの評価>

user_id || apartment_id || rating 
=================================== 
    1    1     4 
    2    5     3 
    3    10     4 
    4    10     5 

iの値よりも大きな評価を持っているマンション名を取得する必要があります同じアパートに異なるユーザーからの評価が2つ以上ある場合(アパートID = 10のように)、アパートは平均が「x」よりも大きい場合に返されます。

SELECT a.* FROM `apartment` AS a  LEFT JOIN `ratings` AS b ON a.`apartment_id` = b.`apartment_id` WHERE a.`status` NOT IN ('inactive') AND (b.apartment_id IN (SELECT apartment_id FROM `ratings` WHERE `rating` > x)) GROUP BY a.`apartment_id` 

アパートは、アパートは、複数の評価値を有する場合にのみ1 rating..plsヘルプ

答えて

0
SELECT a.apartment_name, 
     t.avg_rating 
FROM apartment a 
LEFT JOIN(SELECT s.apartment_id , AVG(s.rating) as avg_rating 
    FROM ratings s 
    GROUP BY s.apartment_id 
    HAVING AVG(s.rating) > <X..>) t 
ON(t.apartment_id = a.apartment_id) 
WHERE a.status NOT IN ('inactive') 
+0

がクエリに問題があるように思われるがある場合は、上記のクエリは正常に動作します...すべて**アパート**テーブルにある "アパートメント**"テーブルのアパートは格付けに関係なく表示されています**アパート**テーブルにある**評価**テーブルには存在しないアパートも表示されています – ashwin

+0

@ ashwinそれらはあなたのフィルターであり、私のものではありません。両方のテーブルに表示される結果だけが必要な場合は、 'LEFT JOIN'ではなく' INNER JOIN'を使用してください。 'NOT IN( 'active')'を使用していて、 'NOT IN( 'inactive')でないものだけを有効にしたい場合は – sagi

+0

LEFT JOINをINNER JOIN.....に変更しました..thanku @sagi – ashwin

関連する問題