使用SUM进行GROUP BY而不删除空(null)值

krz*_*kov 1 sql group-by sql-function querydsl

表:

玩家

player_no   | transaction_id
----------------------------
1           | 11
2           | 22
3           | (null)
1           | 33
Run Code Online (Sandbox Code Playgroud)

交易

id            | value   |
-----------------------
11            | 5
22            | 10
33            | 2
Run Code Online (Sandbox Code Playgroud)

我的目标是获取所有数据,维护所有玩家,即使null是以下查询中的值:

SELECT p.player_no, COUNT(p.player_no), SUM(t.value) FROM Players p 
INNER JOIN Transactions t ON p.transaction_id = t.id 
GROUP BY p.player_no
Run Code Online (Sandbox Code Playgroud)

然而,结果省略了空值,例如:

player_no | count  | sum
------------------------
1         | 2      |  7
2         | 1      |  10
Run Code Online (Sandbox Code Playgroud)

我想提到的是空值:

player_no | count  | sum
------------------------
1         | 2      |  7
2         | 1      |  10
3         | 0      |  0
Run Code Online (Sandbox Code Playgroud)

我在这里想念什么?实际上我使用QueryDSL,但是将示例转换为纯SQL,因为它的行为方式相同.

D-S*_*hih 7

使用LEFT JOINcoalesce功能

SELECT p.player_no, COUNT(p.player_no), coalesce(SUM(t.value),0) 
FROM Players p 
LEFT JOIN Transactions t ON p.transaction_id = t.id 
GROUP BY p.player_no
Run Code Online (Sandbox Code Playgroud)