12店铺应急订单统计.sql 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. -- Active: xiaoding_test@@192.168.110.85@3306@xiaoding_test
  2. /*
  3. 您是一位专业的dba,同时会业务分析。请参考以上数据库的设计文档,给我写一个sql,关联查询出:xxx字段
  4. AI一般会出现的问题 用户表是member_users表 技师名称最终实在用户表找到的
  5. 店铺名称是order表通过shop_id关联shop_auth_records表并判断shop_id是否存在存在则获取shop_name字段为店铺名称不存在则空着即可,
  6. 项目名称是order表的service_id关联shop_services表并判断service_id是否存在,存在则获取name字段为项目名称不存在则空着即可,
  7. 下单时间是order表id关联order_records表并判断state字段的状态为用户下单获取created_at字段为下单时间,
  8. 下单金额是order表中total_amount字段,技师名称是order表通过coach_id关联coach_users表并获取到user_id再通过user_id去关联member_users表获取nickname字段做为技师名称,
  9. 到达时间是order表id关联order_records表并state状态为已到达获取created_at字段为到达时间,区域是order表中的area_code字段,
  10. 位置是order表中的address字段,店铺联系电话是order表通过shop_id关联shop_auth_records表并判断shop_id是否存在,
  11. 存在则获取contact_phone字段为店铺联系电话不存在则空着即可,
  12. 技师联系方式是order表coach_id关联coach_users表获取到的user_id再通过user_id关联member_users表获取mobile字段做为技师联系方式,
  13. 距离是order表中distance字段,平台收入是order表通过id关联wallet_split_records并判断订单编号是否存在,
  14. 存在则通过判断split_type分账类型去获取对应的split_amount分账金额字段做为平台收入
  15. */
  16. /*
  17. 查询订单相关信息包括:
  18. 店铺名称、项目名称、下单时间、下单金额、技师名称、到达时间、区域、位置、
  19. 店铺联系电话、技师联系方式、距离、平台收入
  20. */
  21. DROP TABLE IF EXISTS report_shop_emergency_order;
  22. CREATE TABLE report_shop_emergency_order AS
  23. WITH
  24. order_times AS (
  25. SELECT
  26. order_id,
  27. MAX(
  28. CASE
  29. WHEN state = 'USER_SUBMIT' THEN created_at
  30. END
  31. ) AS submit_time /* 下单时间 */,
  32. MAX(
  33. CASE
  34. WHEN state = 'COACH_ARRIVED' THEN created_at
  35. END
  36. ) AS arrive_time /* 到达时间 */
  37. FROM order_records
  38. WHERE
  39. state IN (
  40. 'USER_SUBMIT',
  41. 'COACH_ARRIVED'
  42. )
  43. GROUP BY
  44. order_id
  45. )
  46. SELECT
  47. ord.id as order_id /* 订单编号 */,
  48. COALESCE(sar.shop_name, '') as shop_name /* 店铺名称 */,
  49. COALESCE(ss.name, '') as service_name /* 项目名称 */,
  50. ot.submit_time as submit_time /* 下单时间 */,
  51. ord.total_amount as total_amount /* 下单金额 */,
  52. COALESCE(mu.nickname, '') as coach_name /* 技师名称 */,
  53. ot.arrive_time as arrive_time /* 到达时间 */,
  54. ord.area_code as area_code /* 区域 */,
  55. ord.address as address /* 位置 */,
  56. COALESCE(sar.contact_phone, '') as shop_phone /* 店铺联系电话 */,
  57. COALESCE(mu.mobile, '') as coach_phone /* 技师联系方式 */,
  58. ord.distance as distance /* 距离 */,
  59. COALESCE(wsr.split_amount, 0.00) as platform_income /* 平台收入 */
  60. FROM
  61. `order` ord /* 使用反引号避免关键字冲突,使用别名ord */
  62. LEFT JOIN shop_auth_records sar ON ord.shop_id = sar.shop_id /* 关联店铺认证信息 */
  63. LEFT JOIN shop_services ss ON ord.service_id = ss.id /* 关联店铺服务 */
  64. LEFT JOIN order_times ot ON ord.id = ot.order_id /* 关联订单时间 */
  65. LEFT JOIN coach_users cu ON ord.coach_id = cu.id /* 关联技师用户 */
  66. LEFT JOIN member_users mu ON cu.user_id = mu.id /* 关联会员用户 */
  67. LEFT JOIN wallet_split_records wsr ON ord.id = wsr.order_id
  68. AND wsr.split_type = 'PLATFORM_SHARE' /* 关联钱包分账记录-平台分成 */
  69. WHERE
  70. 1 = 1
  71. /* 这里可以添加其他筛选条件,如时间范围、订单状态等 */
  72. ORDER BY ord.id DESC /* 按订单编号倒序排序 */