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 ;