Postgres - 根据列值添加或减少行

Mon*_*ock 2 sql postgresql

我有一张桌子shipments

--------------------------
id | event    | quantity |
--------------------------
1  | received | 20       |
2  | sent     | 30       | 
3  | received | 45       |
Run Code Online (Sandbox Code Playgroud)

我想要一个查询,它将所有数量相加received,并从sent数量中减去该值。查询应返回结果35

SELECT SUM(quantity)
FROM shipments
WHERE event = 'received';
Run Code Online (Sandbox Code Playgroud)

该查询返回65. 我怎样才能让它也减去数量sent(并得到结果35)?

sti*_*bit 6

使用CASE根据 放置符号的表达式event

SELECT sum(CASE event
             WHEN 'received' THEN
               quantity
             WHEN 'sent' THEN
               -quantity
             ELSE
               0
           END)
       FROM shipments;
Run Code Online (Sandbox Code Playgroud)