02技师列表.sql 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111
  1. -- Active: xiaoding_test@@192.168.110.85@3306
  2. /*
  3. 这段sql语句是根据"market_dist_teams"表获取的,这个表的解释是:
  4. 1、当一个用户A邀请另一个用户B的时候,数据是这样的
  5. - object_id是A的id
  6. - object_type是A的用户类型
  7. - user_id是B的id
  8. - 统计的时候A是B的一级邀请人
  9. 2、当用户B邀请C的时候,数据是这样的
  10. - object_id是B的id
  11. - object_type是B的用户类型
  12. - user_id是C的id
  13. - 统计的时候B是C的一级邀请人
  14. - 统计的时候A是C的二级邀请人
  15. 请重写我的统计sql
  16. */
  17. /*新的技师管理视图*/
  18. DROP VIEW IF EXISTS v_coach_list;
  19. CREATE OR REPLACE VIEW v_coach_list AS
  20. SELECT
  21. cu.id AS id,/*技师id*/
  22. ci.id AS info_record_id,/*技师信息记录id*/
  23. ci.nickname AS nickname,/*技师名称*/
  24. ci.mobile AS mobile,/*手机号码*/
  25. ci.avatar AS avatar,/*头像*/
  26. ci.gender AS gender,/*性别*/
  27. ci.birthday AS birthday,/*生日*/
  28. cu.created_at AS created_at,/*注册时间*/
  29. cu.state AS state,/*技师状态*/
  30. cu.invite_code AS invite_code,/*邀请码*/
  31. cu.qr_code AS qr_code,/*二维码*/
  32. cu.is_vip AS is_vip, /*是否开通会员*/
  33. cu.vip_time AS vip_time,/*开通会员时间*/
  34. cu.level AS level,/*技师等级*/
  35. cu.score AS score,/*技师评分*/
  36. cu.work_status AS work_status,/*工作状态*/
  37. cu.formal_photo AS formal_photo,/*正式照*/
  38. cu.virtual_order AS virtual_order,/*虚拟订单*/
  39. /* 认证信息 */
  40. crr.id AS real_auth_record_id,/*实名认证记录id*/
  41. crr.id_card AS id_card,/*身份证*/
  42. crr.real_name AS real_name,/*真实姓名*/
  43. crr.id_card_front_photo AS id_card_front_photo,/*身份证正面*/
  44. crr.id_card_back_photo AS id_card_back_photo,/*身份证反面*/
  45. cq.id AS qual_record_id,/*资格认证记录id*/
  46. cq.health_cert AS health_cert,/*健康证*/
  47. cq.qual_photo AS qual_photo,/*资格证*/
  48. cq.business_license AS business_license,/*营业执照*/
  49. /* 所属店铺 */
  50. sar.id AS shop_auth_record_id,/*店铺认证记录id*/
  51. sar.shop_name AS shop_name,/*店铺名称*/
  52. /* 当前位置信息 */
  53. cl.id AS location_id,/*位置记录id*/
  54. cl.city AS city,/*城市*/
  55. cl.address AS address,/*当前位置*/
  56. /* 钱包余额 */
  57. cw.id AS wallet_id,/*钱包id*/
  58. COALESCE(cw.total_income, 0) AS total_income,/*总收入*/
  59. COALESCE(cw.total_expense, 0) AS total_expense,/*总支出*/
  60. COALESCE(cw.total_balance, 0) AS total_balance,/*钱包余额*/
  61. COALESCE(cw.available_balance, 0) AS available_balance,/*可用余额*/
  62. COALESCE(cw.frozen_amount, 0) AS frozen_amount,/*冻结余额*/
  63. /* 订单统计 */
  64. COALESCE(os.completed_order_count, 0) AS completed_order_count, /*完成订单数*/
  65. COALESCE(os.overtime_order_count, 0) AS overtime_order_count, /*加钟订单数*/
  66. COALESCE(os.overtime_amount, 0) AS overtime_amount, /*加钟总金额*/
  67. COALESCE(os.avg_overtime_amount, 0) AS avg_overtime_amount, /*平均加钟金额*/
  68. /* 一级邀请人 */
  69. CASE
  70. WHEN mdt1.object_type = 'App\\Models\\CoachUser' THEN ci1.nickname
  71. WHEN mdt1.object_type = 'App\\Models\\MemberUser' THEN mu1.nickname
  72. END AS inviter_level1_name,
  73. /* 二级邀请人 */
  74. CASE
  75. WHEN mdt2.object_type = 'App\\Models\\CoachUser' THEN ci2.nickname
  76. WHEN mdt2.object_type = 'App\\Models\\MemberUser' THEN mu2.nickname
  77. END AS inviter_level2_name
  78. FROM coach_users cu
  79. LEFT JOIN coach_info_records ci ON cu.info_record_id = ci.id
  80. LEFT JOIN coach_locations cl ON cu.id = cl.coach_id AND cl.type = 2
  81. LEFT JOIN coach_qual_records cq ON cu.qualification_record_id = cq.id
  82. LEFT JOIN shop_auth_records sar ON cu.shop_id = sar.shop_id
  83. LEFT JOIN coach_real_records crr ON cu.real_auth_record_id = crr.id
  84. LEFT JOIN wallet cw ON cu.id = cw.owner_id AND cw.owner_type = 'App\\Models\\CoachUser'
  85. /* 订单统计关联 */
  86. LEFT JOIN (
  87. SELECT
  88. coach_id,
  89. COUNT(CASE WHEN state = 12 AND type != 3 THEN 1 END) AS completed_order_count,
  90. COUNT(CASE WHEN state = 12 AND type = 3 THEN 1 END) AS overtime_order_count,
  91. SUM(CASE WHEN state = 12 AND type = 3 THEN pay_amount + balance_amount ELSE 0 END) AS overtime_amount,
  92. ROUND(
  93. SUM(CASE WHEN state = 12 AND type = 3 THEN pay_amount + balance_amount ELSE 0 END) /
  94. NULLIF(COUNT(CASE WHEN state = 12 AND type = 3 THEN 1 END), 0),
  95. 2
  96. ) AS avg_overtime_amount
  97. FROM `order` -- 这里表名应该是orders而不是order
  98. GROUP BY coach_id
  99. ) os ON os.coach_id = cu.id
  100. /* 一级邀请人关联 */
  101. LEFT JOIN market_dist_teams mdt1 ON cu.id = mdt1.user_id AND mdt1.level = 1
  102. LEFT JOIN coach_info_records ci1 ON mdt1.object_type = 'App\\Models\\CoachUser' AND mdt1.object_id = ci1.coach_id
  103. LEFT JOIN member_users mu1 ON mdt1.object_type = 'App\\Models\\MemberUser' AND mdt1.object_id = mu1.id
  104. /* 二级邀请人关联 */
  105. LEFT JOIN market_dist_teams mdt2 ON cu.id = mdt2.user_id AND mdt2.level = 2
  106. LEFT JOIN coach_info_records ci2 ON mdt2.object_type = 'App\\Models\\CoachUser' AND mdt2.object_id = ci2.coach_id
  107. LEFT JOIN member_users mu2 ON mdt2.object_type = 'App\\Models\\MemberUser' AND mdt2.object_id = mu2.id
  108. WHERE cu.deleted_at IS NULL