2016-05-23 8 views
0

私はいくつかの研究を行い、COALESCE(sum(num), 0)機能について学んだ。問題は、1つの表の使用に関連しているだけの例です。2番目のテーブルにレコードがない場合は、合計を選択しますか?

2番目のテーブルから合計を計算していますが、2番目のテーブルの項目のレコードがない場合でも、クエリに表示され、合計が0になります。

SELECT note.user, note.product, note.noteID, note.note, COALESCE(sum(noteTable.Score), 0) as points 
FROM note, noteTable 
WHERE note.user <> 3 AND note.noteID = noteTable.noteID 

2番目のテーブルにエントリがある場合のみ結果を受信します。noteTable。ノート用にスコアが追加されている場合は、ポイント値が0の結果に表示されるようにします。

表の例:

user | noteID | sum(points) 
3  1   5 
3  2   0 
4  3   0 

user | product | noteID |note 
3  1   1  Great 
3  2   2  Awesome 
4  1   3  Sweet 

NoteTable

noteID | score 
1   5 

クエリは私にこれを示さなければなりません

しかし、私はこれだけを取得しています:

user | noteID | sum(points) 
3  1   5 
+0

テーブル形式といくつかのダミーデータを含むMySQLを設定すると、あなたの質問に答えようとしているユーザーのために_a lot_に役立ちます。さもなければ人々はただ仮定する必要があります。 – Jhecht

答えて

2

http://sqlfiddle.com/#!9/aae812/2

SELECT 
    note.user, 
    note.product, 
    note.noteID, note.note, 
    COALESCE(sum(noteTable.Score),0) as points 
FROM note 
LEFT JOIN noteTable 
ON note.noteID = noteTable.noteID 
WHERE note.user <> 3 

と私はあなたが追加する必要があります推測:

GROUP BY note.noteid 

あなたはすべてのuserためSUMを取得することが予想される場合。だからあなたは1レコードを戻したいと思っています。

+0

私はすべてのメモの合計を取得しようとしています。しかし、上記は、2番目のテーブルにエントリがない場合の結果を返しません。 – Mike

+0

私はあなたが 'note.id'(あなたは' GROUP BY note.id'であるべきでしょう)を持っていると思います。しかし、あなたがsqlfiddleにいくつかのデータサンプルを提供することができればさらに優れています。 – Alex

+0

はテーブルを作成しようとしましたが、フォーマットはまったく表示されませんでした。新しい行でさえ... – Mike

0

最初に、適切なJOIN構文とテーブルエイリアスを使用する方法を学びます。あなたの質問への答えはCOALESCE()とともにSUM()です:あなたはまた、GROUP BYが必要

SELECT n.user, n.product, n.noteID, n.note, 
     COALESCE(sum(nt.Score), 0) as points 
FROM note n LEFT JOIN 
    noteTable nt 
    ON n.noteID = nt.noteID 
WHERE n.user <> 3 
GROUP BY n.user, n.product, n.noteID, n.note; 

関連する問題