INSERT INTO FinishAssignStat ( uid, assignmentId, content, lessonCount, completeCount, created , howmuch, maxScore, avgScore , areaid,uuid,isSign) Values ( #{uid}, #{assignmentId}, #{content}, #{lessonCount}, #{completeCount},#{created} , #{howmuch}, #{maxScore}, #{avgScore} , #{areaid}, #{uuid}, #{isSign}) on conflict(assignmentid,uid,areaid) do update set created=excluded.created,completeCount=excluded.completeCount,howmuch=excluded.howmuch,maxScore=excluded.maxScore,avgScore=excluded.avgScore, uuid=excluded.uuid UPDATE FinishAssignStat SET uid = #{uid}, assignmentId = #{assignmentId}, content = #{content}, lessonCount = #{lessonCount}, completeCount = #{completeCount}, created = #{created} , howmuch = #{howmuch}, maxScore = #{maxScore}, avgScore = #{avgScore} , areaid = #{areaid} ,isSign = #{isSign} where uid=#{uid} and assignmentId=#{assignmentId} delete from FinishAssignStat m using ( select a.uid , c.assignmentId , count( distinct c.lessonId ) as finishCount from Achivement a inner join AssignDetail c on a.objectId = c.lessonId and c.assignType in ( 'U' , 'L' ) and a.achiveType = 'L' and a.pointCaseType in ( 5, 6 ,7 , 8 ) inner join Assignment m on c.assignmentId = m.assignmentId and a.created <= m.endtime and a.created >= m.starttime group by a.uid , c.assignmentId ) n where m.uid = n.uid and m.assignmentId = n.assignmentId ; Insert into FinishAssignStat ( uid , assignmentId , content , lessonCount , completeCount , created , howmuch , maxScore , avgScore , areaid ) select l.uid , l.assignmentId , left(m.content,200) , n.lessonCount , l.finishCount , current_timestamp , l.howmuch , l.maxScore , l.avgScore , l.areaid from ( select a.uid , c.assignmentId , count( distinct c.lessonId ) as finishCount , count(*) as howmuch , max( score ) as maxScore , avg( score ) as avgScore , a.areaid from Achivement a inner join AssignDetail c on a.objectId = c.lessonId and c.assignType in ( 'U' , 'L' ) and a.achiveType = 'L' and a.pointCaseType in ( 5, 6 ,7 , 8 ) inner join Assignment m on c.assignmentId = m.assignmentId and a.created <= m.endtime and a.created >= m.starttime group by a.uid , c.assignmentId , a.areaid) l inner join Assignment m on l.assignmentId = m.assignmentId inner join ( select assignmentId , count(distinct(assigntype,unitid,lessonid)) as lessonCount from assignDetail group by assignmentId ) n on l.assignmentId = n.assignmentId ;