01用户列表.sql 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. -- Active: xiaoding_test@@192.168.110.85@3306@xiaoding_test
  2. WITH
  3. user_base AS (
  4. -- 基础用户信息
  5. SELECT
  6. id AS user_id,
  7. nickname,
  8. created_at AS register_time,
  9. deleted_at AS logout_time,
  10. mobile AS contact,
  11. last_login_time,
  12. invite_code,
  13. qrcode,
  14. avatar,
  15. state AS user_status
  16. FROM member_users
  17. WHERE
  18. deleted_at IS NULL
  19. ),
  20. user_address AS (
  21. -- 用户默认地址信息
  22. SELECT
  23. user_id,
  24. location AS user_location,
  25. province,
  26. city,
  27. district
  28. FROM member_address
  29. WHERE
  30. is_default = 'YES'
  31. ),
  32. user_wallet AS (
  33. -- 用户钱包信息
  34. SELECT
  35. owner_id AS user_id,
  36. available_balance AS wallet_balance
  37. FROM wallet
  38. WHERE
  39. owner_type = 'USER'
  40. ),
  41. user_order_stats AS (
  42. -- 近3个月订单统计
  43. SELECT
  44. user_id,
  45. COUNT(DISTINCT id) AS order_count,
  46. COALESCE(AVG(total_amount), 0) AS avg_order_amount
  47. FROM `order`
  48. WHERE
  49. created_at >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH)
  50. GROUP BY
  51. user_id
  52. ),
  53. user_violation_stats AS (
  54. -- 近3个月违规统计
  55. SELECT user_id, COUNT(DISTINCT id) AS violation_count
  56. FROM violation_records
  57. WHERE
  58. created_at >= DATE_SUB(CURDATE(), INTERVAL 3 MONTH)
  59. GROUP BY
  60. user_id
  61. ),
  62. user_inviters AS (
  63. -- 用户邀请人信息
  64. SELECT
  65. t1.user_id,
  66. l1.nickname AS level1_inviter,
  67. l2.nickname AS level2_inviter
  68. FROM
  69. market_dist_teams t1
  70. LEFT JOIN member_users l1 ON l1.id = t1.object_id
  71. AND t1.level = 'LEVEL_1'
  72. LEFT JOIN market_dist_teams t2 ON t2.user_id = t1.user_id
  73. AND t2.level = 'LEVEL_2'
  74. LEFT JOIN member_users l2 ON l2.id = t2.object_id
  75. )
  76. -- 最终查询
  77. SELECT
  78. ub.*,
  79. ua.user_location,
  80. ua.province,
  81. ua.city,
  82. ua.district,
  83. uw.wallet_balance,
  84. COALESCE(uos.order_count, 0) AS order_count,
  85. COALESCE(uvs.violation_count, 0) AS violation_count,
  86. COALESCE(uos.avg_order_amount, 0) AS avg_order_amount,
  87. ui.level1_inviter,
  88. ui.level2_inviter
  89. FROM
  90. user_base ub
  91. LEFT JOIN user_address ua ON ua.user_id = ub.user_id
  92. LEFT JOIN user_wallet uw ON uw.user_id = ub.user_id
  93. LEFT JOIN user_order_stats uos ON uos.user_id = ub.user_id
  94. LEFT JOIN user_violation_stats uvs ON uvs.user_id = ub.user_id
  95. LEFT JOIN user_inviters ui ON ui.user_id = ub.user_id
  96. ORDER BY ub.register_time DESC
  97. LIMIT 20;