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

同城市分组SQL计算:SQLite表按城市实现特定产品值加权运算

SQLite按城市分组实现特定产品加权计算

原表数据

假设表名为product_values,数据如下:

ID  City Product    Value
1   A   Lubs        22
2   A   Ethanol     14
3   A   S500        10
4   A   S10         13
5   A   Biodiesel   40
6   A   Gasoline    15
7   B   Lubs        8
8   B   Ethanol     20
9   B   S500        12
10  B   S10         15
11  B   Biodiesel   50
12  B   Gasoline    8

计算规则

按城市分组,对指定产品执行以下计算:

  • Lubs:保留原始Value值
  • S500/S10:自身Value * 88% + 同城市Biodiesel的Value * 12%
  • Gasoline:同城市Ethanol的Value * 27% + 自身Value * 73%

实现SQL

方案1:返回计算后的数值结果

使用窗口函数获取同城市的关联产品值,简洁高效(SQLite 3.25+支持窗口函数):

SELECT
    City,
    Product,
    CASE Product
        WHEN 'Lubs' THEN Value
        WHEN 'S500' THEN Value * 0.88 + MAX(CASE WHEN Product = 'Biodiesel' THEN Value END) OVER (PARTITION BY City) * 0.12
        WHEN 'S10' THEN Value * 0.88 + MAX(CASE WHEN Product = 'Biodiesel' THEN Value END) OVER (PARTITION BY City) * 0.12
        WHEN 'Gasoline' THEN MAX(CASE WHEN Product = 'Ethanol' THEN Value END) OVER (PARTITION BY City) * 0.27 + Value * 0.73
    END AS Value_Pond
FROM product_values
WHERE Product IN ('Lubs', 'S500', 'S10', 'Gasoline')
ORDER BY City, Product;

执行后得到的数值结果:

City    Product    Value_Pond
A       Lubs       22.0
A       Gasoline   14.73
A       S10        16.24
A       S500       13.6
B       Lubs       8.0
B       Gasoline   10.84
B       S10        18.7
B       S500       15.36

方案2:返回计算表达式字符串

如果需要和示例一致的表达式格式(而非计算结果),可以修改CASE语句拼接字符串:

SELECT
    City,
    Product,
    CASE Product
        WHEN 'Lubs' THEN CAST(Value AS TEXT)
        WHEN 'S500' THEN '=' || CAST(Value AS TEXT) || '*88% + ' || CAST(MAX(CASE WHEN Product = 'Biodiesel' THEN Value END) OVER (PARTITION BY City) AS TEXT) || '*12%'
        WHEN 'S10' THEN '=' || CAST(Value AS TEXT) || '*88% + ' || CAST(MAX(CASE WHEN Product = 'Biodiesel' THEN Value END) OVER (PARTITION BY City) AS TEXT) || '*12%'
        WHEN 'Gasoline' THEN '=' || CAST(MAX(CASE WHEN Product = 'Ethanol' THEN Value END) OVER (PARTITION BY City) AS TEXT) || '*27% + ' || CAST(Value AS TEXT) || '*73%'
    END AS Value_Pond
FROM product_values
WHERE Product IN ('Lubs', 'S500', 'S10', 'Gasoline')
ORDER BY City, Product;

执行后得到的表达式结果:

City    Product    Value_Pond
A       Lubs       22
A       Gasoline   =14*27% + 15*73%
A       S10        =13*88% + 40*12%
A       S500       =10*88% + 40*12%
B       Lubs       8
B       Gasoline   =20*27% + 8*73%
B       S10        =15*88% + 50*12%
B       S500       =12*88% + 50*12%

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 09:13:20