فهرست منبع

优化sql查询

hgw 3 سال پیش
والد
کامیت
915019e032
1فایلهای تغییر یافته به همراه24 افزوده شده و 18 حذف شده
  1. 24 18
      mec-biz/src/main/resources/config/mybatis/TempLittleArtistTrainingCampMapper.xml

+ 24 - 18
mec-biz/src/main/resources/config/mybatis/TempLittleArtistTrainingCampMapper.xml

@@ -106,24 +106,30 @@
         e.name_ as imGroupName,
         ifnull(b.playDay, 0) as playDay,
         ifnull(c.playTime, 0) as playTime
-        FROM temp_little_artist_training_camp_user_relation as a
-        left join (select a.user_id_, count(playDay) as playDay
-        from (SELECT cr.`user_id_`,
-        date(cr.`create_time_`) as playDay
-        FROM `sys_music_compare_record` cr
-        WHERE date(cr.`create_time_`) >= #{param.startTime}
-        AND date(cr.`create_time_`) <= #{param.endTime}
-        GROUP BY cr.`user_id_`, date(cr.`create_time_`)
-        HAVING sum(cr.`play_time_`) > 1200) as a
-        group by a.user_id_) as b on a.user_id_ = b.user_id_
-        left join (SELECT cr.`user_id_`,
-        sum(cr.`play_time_`) as playTime
-        FROM `sys_music_compare_record` cr
-        WHERE date(cr.`create_time_`) >= #{param.startTime}
-        AND date(cr.`create_time_`) <= #{param.endTime}
-        GROUP BY cr.`user_id_`) as c on a.user_id_ = c.user_id_
-        left join sys_user as d on d.id_ = a.user_id_
-        left join im_group as e on a.im_group_id_ = e.id_
+        FROM `temp_little_artist_training_camp_user_relation` `a`
+        LEFT JOIN (
+        SELECT `a`.`user_id_`, COUNT(`playDay`) AS `playDay`
+        FROM (
+        SELECT `cr`.`user_id_`, DATE(`cr`.`create_time_`) AS `playDay`
+        FROM `sys_music_compare_record` `cr`
+        WHERE `cr`.`create_time_` >= DATE_ADD(DATE(#{param.startTime}), INTERVAL IF(#{param.startTime} = DATE(#{param.startTime}), 0, 1) DAY)
+        AND `cr`.`create_time_` < DATE_ADD(DATE(#{param.endTime}), INTERVAL 1 DAY)
+        GROUP BY `cr`.`user_id_`, DATE(`cr`.`create_time_`)
+        HAVING SUM(`cr`.`play_time_`) > 1200
+        ) `a`
+        GROUP BY `a`.`user_id_`
+        ) `b`
+        ON `a`.`user_id_` = `b`.`user_id_`
+        LEFT JOIN (
+        SELECT `cr`.`user_id_`, SUM(`cr`.`play_time_`) AS `playTime`
+        FROM `sys_music_compare_record` `cr`
+        WHERE `cr`.`create_time_` >= DATE_ADD(DATE(#{param.startTime}), INTERVAL IF(#{param.startTime} = DATE(#{param.startTime}), 0, 1) DAY)
+        AND `cr`.`create_time_` < DATE_ADD(DATE(#{param.endTime}), INTERVAL 1 DAY)
+        GROUP BY `cr`.`user_id_`
+        ) `c`
+        ON `a`.`user_id_` = `c`.`user_id_`
+        LEFT JOIN `sys_user` `d` ON `d`.`id_` = `a`.`user_id_`
+        LEFT JOIN `im_group` `e` ON `a`.`im_group_id_` = `e`.`id_`
         <where>
             a.activity_id_ = #{param.campId} and a.state_ = #{param.state}
             <if test="param.imGroupId != null">