SQL实现:将客户均匀分配至同城市可用销售人员
客户与同城市销售人员均匀分配方案
核心思路
基于同一城市分组,对客户和销售人员分别排序后,通过取模运算实现均匀分配,确保每个销售人员的客户数量差异不超过1。
具体实现步骤(以SQL为例)
假设已关联的中间表名为city_linked_data,包含字段:customer_id(客户ID)、customer_name(客户名称)、city(城市)、sales_id(销售ID)、sales_name(销售名称)
- 按城市统计可用销售人员数量
WITH sales_count_per_city AS ( SELECT city, COUNT(DISTINCT sales_id) AS sales_num FROM city_linked_data GROUP BY city ),
- 对每个城市内的客户进行排序编号
ranked_customers AS ( SELECT c.*, ROW_NUMBER() OVER (PARTITION BY c.city ORDER BY c.customer_id) AS customer_rank FROM city_linked_data c JOIN sales_count_per_city s ON c.city = s.city )
- 匹配销售人员完成均匀分配
SELECT rc.customer_id, rc.customer_name, rc.city, s.sales_id, s.sales_name FROM ranked_customers rc JOIN ( SELECT city, sales_id, sales_name, ROW_NUMBER() OVER (PARTITION BY city ORDER BY sales_id) AS sales_rank FROM city_linked_data GROUP BY city, sales_id, sales_name ) s ON rc.city = s.city AND (rc.customer_rank % s.sales_num) + 1 = s.sales_rank ORDER BY rc.city, s.sales_id, rc.customer_id;
关键说明
- 取模运算
(customer_rank % sales_num) + 1能保证客户被均匀分配,避免出现某销售人员分配客户过多的情况 - 排序字段(
customer_id、sales_id)可根据实际业务需求替换为其他字段(如客户创建时间、销售人员入职时间等) - 若销售人员名单变动,重新执行该逻辑即可快速更新分配结果
内容的提问来源于stack exchange,提问作者Vinicius Oliveira
相关产品推荐
相关产品推荐

