创建金三角月度业绩统计视图.sql 2.41 KB
-- 创建金三角月度业绩统计视图
-- 功能:获取每个金三角的每个月开单业绩总和
-- 关联表:lq_kd_jksyj(健康师业绩表)、lq_ycsd_jsj(金三角设定表)、lq_jinsanjiao_user(金三角用户绑定表)

CREATE VIEW v_jsj_monthly_performance AS
SELECT 
    jsj.F_Id AS jsj_id,                    -- 金三角ID
    jsj.jsj AS jsj_name,                   -- 金三角名称
    jsj.yf AS month,                       -- 月份
    jsj.md AS store_id,                    -- 门店ID
    md.dm AS store_name,                   -- 门店名称
    COUNT(DISTINCT jksyj.F_Id) AS order_count,  -- 开单数量
    SUM(CAST(jksyj.jksyj AS DECIMAL(18,2))) AS total_performance,  -- 总业绩
    AVG(CAST(jksyj.jksyj AS DECIMAL(18,2))) AS avg_performance,    -- 平均业绩
    MAX(jksyj.yjsj) AS last_order_date,    -- 最后开单日期
    MIN(jksyj.yjsj) AS first_order_date,   -- 首次开单日期
    COUNT(DISTINCT jksyj.jks) AS health_teacher_count,  -- 健康师数量
    GROUP_CONCAT(DISTINCT jksyj.jksxm ORDER BY jksyj.jksxm SEPARATOR ',') AS health_teachers  -- 健康师姓名列表
FROM 
    lq_ycsd_jsj jsj
    LEFT JOIN lq_kd_jksyj jksyj ON jsj.F_Id = jksyj.jsj_id
    LEFT JOIN lq_mdxx md ON jsj.md = md.F_Id
WHERE 
    jsj.yf IS NOT NULL 
    AND jksyj.yjsj IS NOT NULL
    AND jksyj.jksyj IS NOT NULL 
    AND jksyj.jksyj != ''
    AND jksyj.jksyj != '0'
GROUP BY 
    jsj.F_Id, 
    jsj.jsj, 
    jsj.yf, 
    jsj.md,
    md.dm
ORDER BY 
    jsj.yf DESC, 
    total_performance DESC;

-- 创建索引以优化查询性能
CREATE INDEX idx_lq_kd_jksyj_jsj_yjsj ON lq_kd_jksyj(jsj_id, yjsj);
CREATE INDEX idx_lq_kd_jksyj_jksyj ON lq_kd_jksyj(jksyj);

-- 使用示例查询:
-- 1. 查询所有金三角的月度业绩
-- SELECT * FROM v_jsj_monthly_performance ORDER BY month DESC, total_performance DESC;

-- 2. 查询指定月份的金三角业绩
-- SELECT * FROM v_jsj_monthly_performance WHERE month = '202412' ORDER BY total_performance DESC;

-- 3. 查询指定金三角的业绩历史
-- SELECT * FROM v_jsj_monthly_performance WHERE jsj_id = '具体金三角ID' ORDER BY month DESC;

-- 4. 查询指定门店的金三角业绩
-- SELECT * FROM v_jsj_monthly_performance WHERE store_id = '具体门店ID' ORDER BY month DESC, total_performance DESC;

-- 5. 查询业绩排名前10的金三角
-- SELECT * FROM v_jsj_monthly_performance WHERE month = '202412' ORDER BY total_performance DESC LIMIT 10;