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

基于另一Computed Column创建SQL计算列:判断产品是否低于成本

嘿,我来帮你搞定这个判断产品是否低于成本的计算列问题!核心逻辑就是对比产品的售价和成本价,下面针对主流数据库给出具体的实现方案,你可以根据自己使用的数据库直接套用:

创建判断产品是否低于成本的计算列

假设你的表中有CostPrice(产品成本价)和SellingPrice(产品售价)这两个核心列,如果实际列名不同,记得替换成你自己的列名就行。

1. SQL Server 实现

创建新表时直接添加计算列

CREATE TABLE Products (
    ProductID INT PRIMARY KEY,
    ProductName VARCHAR(100),
    CostPrice DECIMAL(10,2),  -- 成本列
    SellingPrice DECIMAL(10,2),  -- 售价列
    IsBelowCost AS CASE WHEN SellingPrice < CostPrice THEN 1 ELSE 0 END  -- 1代表低于成本,0代表正常
);

给已存在的表追加计算列

如果表已经创建好了,用ALTER TABLE语句添加:

ALTER TABLE Products
ADD IsBelowCost AS CASE WHEN SellingPrice < CostPrice THEN 1 ELSE 0 END;

要是你想返回文本标识(比如Yes/No),修改CASE语句即可:

ALTER TABLE Products
ADD IsBelowCost AS CASE WHEN SellingPrice < CostPrice THEN 'Yes' ELSE 'No' END;

2. MySQL 实现(MySQL 5.7+ 支持)

MySQL需要用GENERATED ALWAYS AS关键字,还可以选择STORED(存储到磁盘)或VIRTUAL(查询时实时计算)类型:

CREATE TABLE Products (
    ProductID INT PRIMARY KEY,
    ProductName VARCHAR(100),
    CostPrice DECIMAL(10,2),
    SellingPrice DECIMAL(10,2),
    -- 用布尔类型标记,true=低于成本
    IsBelowCost BOOLEAN GENERATED ALWAYS AS (SellingPrice < CostPrice) STORED
);

同样支持文本形式:

CREATE TABLE Products (
    ProductID INT PRIMARY KEY,
    ProductName VARCHAR(100),
    CostPrice DECIMAL(10,2),
    SellingPrice DECIMAL(10,2),
    IsBelowCost VARCHAR(3) GENERATED ALWAYS AS (CASE WHEN SellingPrice < CostPrice THEN 'Yes' ELSE 'No' END) STORED
);

3. PostgreSQL 实现

PostgreSQL的语法和MySQL类似,用GENERATED ALWAYS AS定义:

CREATE TABLE Products (
    ProductID INT PRIMARY KEY,
    ProductName VARCHAR(100),
    CostPrice DECIMAL(10,2),
    SellingPrice DECIMAL(10,2),
    IsBelowCost BOOLEAN GENERATED ALWAYS AS (SellingPrice < CostPrice) STORED
);

文本形式的写法:

CREATE TABLE Products (
    ProductID INT PRIMARY KEY,
    ProductName VARCHAR(100),
    CostPrice DECIMAL(10,2),
    SellingPrice DECIMAL(10,2),
    IsBelowCost VARCHAR(3) GENERATED ALWAYS AS (CASE WHEN SellingPrice < CostPrice THEN 'Yes' ELSE 'No' END) STORED
);

额外注意事项

  • 处理NULL值:如果成本价或售价可能为空,可以在CASE语句里加上空值判断,比如:
CASE 
    WHEN SellingPrice < CostPrice THEN 1 
    WHEN SellingPrice IS NULL OR CostPrice IS NULL THEN NULL  -- 也可以改成你需要的默认值,比如0
    ELSE 0 
END
  • 数据类型匹配:确保成本价和售价列的数据类型一致(比如都是DECIMAL),避免比较时出现类型转换错误。

内容的提问来源于stack exchange,提问作者Léa Clément

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:11:43