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

时间:2021-01-31 17:02:34

标签: sql postgresql

我有一张桌子 shipments

--------------------------
id | event    | quantity |
--------------------------
1  | received | 20       |
2  | sent     | 30       | 
3  | received | 45       |

我想要一个对所有 received 数量求和的查询,然后从 sent 数量中减去该值。查询应返回 35 的结果。

SELECT SUM(quantity)
FROM shipments
WHERE event = 'received';

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

1 个答案:

答案 0 :(得分:2)

使用 CASE 表达式,根据 event 放置一个符号。

SELECT sum(CASE event
             WHEN 'received' THEN
               quantity
             WHEN 'sent' THEN
               -quantity
             ELSE
               0
           END)
       FROM shipments;
相关问题