You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PostgreSQL中将指定类型的quantity字段转为负值?

在PostgreSQL中根据type字段调整quantity的正负值

需求说明

现有表数据如下:

Id   type      quantity
1    order       10
2    order       12
3    order       11
4    purchase    5
5    purchase    4
6    credit      2

需要实现:当type为'order'或'credit'时,返回的quantity为负值;type为'purchase'时保持原值,期望结果如下:

Id   type      quantity
1    order       -10
2    order       -12
3    order       -11
4    purchase     5
5    purchase     4
6    credit      -2

实现方法

方法1:使用CASE WHEN语句(通用SQL写法)

这是最直观且兼容所有SQL数据库的写法,通过条件判断返回对应数值:

SELECT 
    id,
    type,
    CASE 
        WHEN type IN ('order', 'credit') THEN quantity * -1
        ELSE quantity
    END AS quantity
FROM your_table_name;

逻辑:当type匹配目标值时,将quantity乘以-1转为负数,否则返回原数值。

方法2:PostgreSQL简洁写法(利用布尔值特性)

PostgreSQL中布尔值true会被转为整数1,false转为0,因此可以用算术运算简化逻辑:

SELECT 
    id,
    type,
    quantity * (1 - 2 * (type IN ('order', 'credit'))) AS quantity
FROM your_table_name;

逻辑:当type在目标列表中时,type IN ('order', 'credit')为true(即1),计算1 - 2*1 = -1,与quantity相乘得到负值;否则计算1 - 2*0 = 1,保持原数值不变。

方法3:使用IIF函数(PostgreSQL 9.4+支持)

如果你的PostgreSQL版本是9.4及以上,可以用IIF函数简化条件判断:

SELECT 
    id,
    type,
    IIF(type IN ('order', 'credit'), quantity * -1, quantity) AS quantity
FROM your_table_name;

IIF函数逻辑:第一个参数为判断条件,满足则返回第二个参数,否则返回第三个参数,效果和CASE语句一致,但写法更简洁。


内容的提问来源于stack exchange,提问作者Simon GIS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 05:10:20