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

如何基于预订量统计结果在MySQL中条件更新Agent级别列

基于关联表统计结果更新agents表的level字段

核心思路是先统计每个agent的预订slot数量,再根据预订量阈值匹配对应等级,最后批量更新agents表的level字段。以下是主流数据库的实现方案:

MySQL 实现

仅更新有预订记录的agent

UPDATE agents a
JOIN (
    -- 统计每个agent的预订数量
    SELECT agent_id, COUNT(*) AS slot_count
    FROM booked_slots
    GROUP BY agent_id
) bs ON a.id = bs.agent_id
SET a.level = CASE
    WHEN bs.slot_count >= 10 THEN 'Gold'
    WHEN bs.slot_count BETWEEN 5 AND 9 THEN 'Silver'
    ELSE 'Bronze'
END;

更新所有agent(含无预订记录的)

如果要确保无预订记录的agent也被设置为Bronze,用LEFT JOIN配合COALESCE处理空值:

UPDATE agents a
LEFT JOIN (
    SELECT agent_id, COUNT(*) AS slot_count
    FROM booked_slots
    GROUP BY agent_id
) bs ON a.id = bs.agent_id
SET a.level = CASE
    WHEN COALESCE(bs.slot_count, 0) >= 10 THEN 'Gold'
    WHEN COALESCE(bs.slot_count, 0) BETWEEN 5 AND 9 THEN 'Silver'
    ELSE 'Bronze'
END;

PostgreSQL 实现

仅更新有预订记录的agent

UPDATE agents a
SET level = CASE
    WHEN bs.slot_count >= 10 THEN 'Gold'
    WHEN bs.slot_count BETWEEN 5 AND 9 THEN 'Silver'
    ELSE 'Bronze'
END
FROM (
    SELECT agent_id, COUNT(*) AS slot_count
    FROM booked_slots
    GROUP BY agent_id
) bs
WHERE a.id = bs.agent_id;

更新所有agent(含无预订记录的)

UPDATE agents a
SET level = CASE
    WHEN COALESCE(bs.slot_count, 0) >= 10 THEN 'Gold'
    WHEN COALESCE(bs.slot_count, 0) BETWEEN 5 AND 9 THEN 'Silver'
    ELSE 'Bronze'
END
FROM (
    SELECT agent_id, COUNT(*) AS slot_count
    FROM booked_slots
    GROUP BY agent_id
) bs
RIGHT JOIN agents a ON a.id = bs.agent_id;

也可以用子查询直接匹配:

UPDATE agents
SET level = (
    SELECT CASE
        WHEN COUNT(*) >= 10 THEN 'Gold'
        WHEN COUNT(*) BETWEEN 5 AND 9 THEN 'Silver'
        ELSE 'Bronze'
    END
    FROM booked_slots
    WHERE booked_slots.agent_id = agents.id
);

SQL Server 实现

仅更新有预订记录的agent

UPDATE a
SET a.level = CASE
    WHEN bs.slot_count >= 10 THEN 'Gold'
    WHEN bs.slot_count BETWEEN 5 AND 9 THEN 'Silver'
    ELSE 'Bronze'
END
FROM agents a
INNER JOIN (
    SELECT agent_id, COUNT(*) AS slot_count
    FROM booked_slots
    GROUP BY agent_id
) bs ON a.id = bs.agent_id;

更新所有agent(含无预订记录的)

UPDATE a
SET a.level = CASE
    WHEN COALESCE(bs.slot_count, 0) >= 10 THEN 'Gold'
    WHEN COALESCE(bs.slot_count, 0) BETWEEN 5 AND 9 THEN 'Silver'
    ELSE 'Bronze'
END
FROM agents a
LEFT JOIN (
    SELECT agent_id, COUNT(*) AS slot_count
    FROM booked_slots
    GROUP BY agent_id
) bs ON a.id = bs.agent_id;

注意事项

  • 请根据实际表结构调整关联字段(比如agents.id、booked_slots.agent_id),确保关联逻辑正确
  • 如果booked_slots存在重复记录,需将COUNT(*)改为COUNT(DISTINCT slot_id)(假设slot_id是预订的唯一标识)来统计真实预订量
  • 执行更新前建议单独运行统计子查询,确认计算结果符合预期,避免误更新数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 19:35:16