如果第二个表中没有记录,请选择零总和?

时间:2016-05-23 00:04:03

标签: mysql sql

我做了一些研究并了解了COALESCE(sum(num), 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

如果第二个表noteTable中有条目,我只收到结果。如果为笔记添加了分数,我仍然希望它们以点值零显示在结果中。

表格示例:

注意

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
3        2          0
4        3          0

但我只是得到了这个:

user | noteID | sum(points)
3        1          5

2 个答案:

答案 0 :(得分: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

如果您希望每SUM获得user。所以你想要获得超过1条记录。

答案 1 :(得分:0)

首先,学习使用正确的JOIN语法和表别名。您的问题的答案是SUM()以及COALESCE()

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;

您还需要GROUP BY