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

如何使用SQLite将数据映射到对应行并更新统计列值?

解决SQLite供应商数据与分类表的映射问题

嘿,我来帮你搞定这个需求!先把你的数据和目标理清楚,再给出完善后的SQL语句。

先明确你的数据和目标

现有供应商数据(假设表名为suppliers)

suppliercount
12050
12145
129151
1510.5

初始的categories表结构

CategoryDiscriptionnumber_of_suppliers
AcountNULL
B0<=count<40NULL
C40.1<countNULL

你期望的最终结果

CategoryDiscriptionnumber_of_suppliers对应供应商
Acount1129
B0<=count<401151
C40.1<count2120, 121

完善后的SQL方案

方案1:直接查询得到完整映射结果

如果你只是需要查询出目标结果(不需要修改categories表),用下面的语句就行,它会同时统计供应商数量并拼接对应ID:

SELECT
    c.Category,
    c.Discription,
    COUNT(s.supplier) AS number_of_suppliers,
    GROUP_CONCAT(s.supplier, ', ') AS 对应供应商
FROM categories c
LEFT JOIN suppliers s ON
    -- 匹配每个分类的供应商条件
    (c.Category = 'A' AND s.count = 151)  -- A类对应count=151的供应商129
    OR (c.Category = 'B' AND s.count >= 0 AND s.count < 40)
    OR (c.Category = 'C' AND s.count > 40.1)
GROUP BY c.Category, c.Discription;

方案2:更新categories表的number_of_suppliers字段

如果需要把统计的数量更新到categories表中,SQLite不支持UPDATE ... FROM的写法,所以用子查询来实现:

UPDATE categories
SET number_of_suppliers = (
    SELECT COUNT(s.supplier)
    FROM suppliers s
    WHERE
        (categories.Category = 'A' AND s.count = 151)
        OR (categories.Category = 'B' AND s.count >= 0 AND s.count < 40)
        OR (categories.Category = 'C' AND s.count > 40.1)
);

执行完这个更新后,categories表的number_of_suppliers就会被填充为对应的值。如果还要看对应供应商列表,用方案1的查询语句即可。

几个小提醒

  • 假设供应商表的表名是suppliers,如果你的实际表名不一样,记得替换成真实名称。
  • SQLite的GROUP_CONCAT默认用逗号分隔,我这里指定了, 让结果更易读。
  • 关于A类的条件:从你的期望结果看,A类对应count=151的供应商129,所以我写了s.count = 151,如果你的A类实际规则有变化,调整这个条件就行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:29:02