2017-08-13 17 views
0

次の属性を持つMYSQLデータベースに2つのテーブルがあります。 サービス(ID、名前、詳細)。 評価(id、sid、points) 評価表のsidは、サービスキーの外部キーです。 以下の形式でデータを表示したい 出力(サービスID、名前、詳細、平均点)平均点での注文。 私はレコードが評価テーブルに存在する場合にのみ、クエリ上記2つ目のテーブルのデータを2番目のテーブルの平均で表示する方法

SELECT s.*, ROUND(COALESCE(AVG(r.points),0)) AS rating 
FROM services s, rating r 
WHERE s.id=r.sid 
ORDER BY rating DESC 

は結果を示し、この目的のために、次のクエリを使用していました。私はレーティングテーブルにレコードが存在するかどうか両方のレコードを表示する必要があります。レーティングテーブルにレコードがない場合、その平均値はゼロとしてカウントされます。 私を助けてください。

答えて

0

変更暗黙的には、(ヌルが返される)左外部結合に参加し、IFNULLに、私は上記のクエリを使用しているが、それは1つのレコードだけを示す代わりにされた返信用

SELECT s.*, ifnull(ROUND(COALESCE(AVG(r.points),0)),0) AS rating 
FROM services s 
left outer join rating r on s.id=r.sid 
ORDER BY rating DESC 
+0

おかげで平均をラップサービステーブルのすべてのレコード –

+0

グループバイ句のない集計があるためです。 s。*、s.name、s.detailsにs。*を変更して、これらのすべてのフィールドにgroup by句を追加してみてください。 –

+0

by group by clauseを追加することによって、私のクエリが動作しています。どうもありがとう。 –

関連する問題