我做了一些研究并了解了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
答案 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
。