V20260722_01__lobster_segment_threshold_config.sql 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. -- 内置自动分群阈值配置支持
  2. -- 1. 确保 lobster_user_segment 表存在 strategy_config 字段
  3. -- 2. 为每个已有 company 初始化内置分群记录(NEW/ACTIVE/SLEEP/DORMANT/CHURN),使用默认阈值
  4. SET @dbname = DATABASE();
  5. SET @tablename = 'lobster_user_segment';
  6. SET @columnname = 'strategy_config';
  7. SET @preparedStatement = (SELECT IF((SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA=@dbname AND TABLE_NAME=@tablename AND COLUMN_NAME=@columnname)>0,'SELECT 1','ALTER TABLE lobster_user_segment ADD COLUMN strategy_config TEXT DEFAULT NULL COMMENT ''策略配置JSON(含阈值等)'''));
  8. PREPARE s FROM @preparedStatement; EXECUTE s; DEALLOCATE PREPARE s;
  9. -- 2. 为每个 company 初始化内置分群记录(仅当不存在时插入)
  10. INSERT INTO lobster_user_segment (company_id, segment_code, segment_name, description, strategy_config, deleted, create_time, update_time)
  11. SELECT
  12. c.company_id,
  13. t.segment_code,
  14. t.segment_name,
  15. t.description,
  16. t.strategy_config,
  17. 0 AS deleted,
  18. NOW() AS create_time,
  19. NOW() AS update_time
  20. FROM (
  21. SELECT DISTINCT company_id FROM lobster_user_segment WHERE company_id IS NOT NULL
  22. UNION
  23. SELECT DISTINCT company_id FROM lobster_user_profile WHERE company_id IS NOT NULL
  24. UNION
  25. SELECT company_id FROM company WHERE IFNULL(is_del, 0) = 0
  26. ) c
  27. CROSS JOIN (
  28. SELECT 'NEW' AS segment_code, '新用户' AS segment_name, '无消费且活跃<=7天的新接入客户' AS description,
  29. '{"thresholds":{"newMaxInteraction":0,"activeMinInteraction":20,"sleepMinDays":31,"sleepMaxDays":60,"dormantMinDays":61,"dormantMaxDays":90,"churnMinDays":91}}' AS strategy_config
  30. UNION ALL SELECT 'ACTIVE', '活跃用户', '有消费且最近30天内活跃,或交互>=20次',
  31. '{"thresholds":{"newMaxInteraction":0,"activeMinInteraction":20,"sleepMinDays":31,"sleepMaxDays":60,"dormantMinDays":61,"dormantMaxDays":90,"churnMinDays":91}}'
  32. UNION ALL SELECT 'SLEEP', '沉睡用户', '有消费,31-60天未活跃',
  33. '{"thresholds":{"newMaxInteraction":0,"activeMinInteraction":20,"sleepMinDays":31,"sleepMaxDays":60,"dormantMinDays":61,"dormantMaxDays":90,"churnMinDays":91}}'
  34. UNION ALL SELECT 'DORMANT', '流失预警', '有消费,61-90天未活跃',
  35. '{"thresholds":{"newMaxInteraction":0,"activeMinInteraction":20,"sleepMinDays":31,"sleepMaxDays":60,"dormantMinDays":61,"dormantMaxDays":90,"churnMinDays":91}}'
  36. UNION ALL SELECT 'CHURN', '流失用户', '无消费且>90天未活跃,或有消费但>90天未活跃',
  37. '{"thresholds":{"newMaxInteraction":0,"activeMinInteraction":20,"sleepMinDays":31,"sleepMaxDays":60,"dormantMinDays":61,"dormantMaxDays":90,"churnMinDays":91}}'
  38. ) t
  39. WHERE NOT EXISTS (
  40. SELECT 1 FROM lobster_user_segment s
  41. WHERE s.company_id = c.company_id AND s.segment_code = t.segment_code AND s.deleted = 0
  42. );