132 lines
16 KiB
XML
132 lines
16 KiB
XML
<?xml version="1.0" encoding="UTF-8"?>
|
|
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
|
|
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
|
<mapper namespace="SouthExamStatistics">
|
|
|
|
|
|
<select id="southExamProvinceStatistics" parameterType="SouthExamStatisticsSeachDto" resultType="SouthExamUseStatisticsDataDto">
|
|
with areas as (select c.areaid ,c.areaName,a.areaid as supParentid,a.areaname as supAreaName ,b.areaName as parAreaName ,b.areaid as parentid from area as a inner join area as b on a.areaid =b.parentid inner join area as c on b.areaid = c.parentid where a.areaid = #{areaId} ),
|
|
schoolCounts as (select count(a.schoolid) as num,b.areaid from areas as b left join school as a on a.areaid = b.areaid and a.status = 1 GROUP BY b.areaid),
|
|
accounts as (select b.areaid ,a.studentid,a.created ,a.lastSignin from areas as b left join student as a on a.areaid = b.areaid where a.source = 11 and a.status = 1 ),
|
|
accountNums as (select count(b.studentid) as num,a.areaid from areas as a left join accounts as b on a.areaid = b.areaid group by a.areaid ),
|
|
internalAccountNums as (select count(studentid) as num,a.areaid from areas as a left join accounts as b on a.areaid = b.areaid where b.lastSignin > #{startTime} and b.lastSignin < #{endTime} group by a.areaid
|
|
),
|
|
onlineAccount as (select b.uid, a.areaid , b.jmark->>'southLastSign'as lastSign from areas as a left join userhonor as b on a.areaid = b.areaid where b.jmark->>'southLastSign' notnull ),
|
|
onlineAccountNum as ( select count(uid) as num, areaid from onlineAccount group by areaid),
|
|
recentlyAccount as (select count(a.uid) as num, a.areaid from onlineAccount as a where a.lastSign >#{startTime} and a.lastSign < #{endTime} group by a.areaid),
|
|
activityDay as (select count(a.uid) as num, a.areaid from onlineAccount as a where to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') > now()- interval '1 day' and to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') < now() GROUP BY a.areaid ),
|
|
|
|
activityWeek as (select count(a.uid) as num, a.areaid from onlineAccount as a where to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') > now()- interval '1 week' and to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') < now() GROUP BY a.areaid),
|
|
|
|
activityMonth as (select count(a.uid) as num, a.areaid from onlineAccount as a where to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') > now()- interval '1 month' and to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') < now() GROUP BY a.areaid)
|
|
|
|
|
|
select a.parentid as areaid ,a.parAreaName as areaName,sum(COALESCE(b.num,0)) as schoolNum,sum(COALESCE(c.num,0)) as accountNum,sum(COALESCE(d.num,0)) as onlineAccountNum ,sum(COALESCE(e.num,0)) as recentlyAccountNum,sum(COALESCE(i.num,0)) as internalAccountNums,sum(COALESCE(f.num,0)) as dayNum ,sum(COALESCE(g.num,0)) as weekNum ,sum(COALESCE(h.num,0)) as monthNum,COALESCE(ROUND(ROUND((sum(COALESCE(d.num,0))+0.0)/sum(c.num),5)*100,3),0) as onlineRate from areas as a left join schoolCounts as b on a.areaid = b.areaid left join accountNums as c on c.areaid = a.areaid left join onlineAccountNum as d on a.areaid = d.areaid left join recentlyAccount as e on a.areaid = e.areaid left join activityDay as f on a.areaid = f.areaid left join activityWeek as g on a.areaid = g.areaid left join activityMonth as h on a.areaid = h.areaid left join internalAccountNums as i on a.areaid = i.areaid GROUP BY a.parentid ,a.parAreaName
|
|
</select>
|
|
|
|
|
|
<select id="southExamCityStatistics" parameterType="SouthExamStatisticsSeachDto" resultType="SouthExamUseStatisticsDataDto">
|
|
with areas as (select c.areaid ,c.areaName,b.areaName as parAreaName ,b.areaid as parentid from area as b inner join area as c on b.areaid = c.parentid where b.areaid =#{areaId} ),
|
|
schoolCounts as (select count(a.schoolid) as num,b.areaid from areas as b left join school as a on a.areaid = b.areaid and a.status = 1 GROUP BY b.areaid),
|
|
accounts as (select b.areaid ,a.studentid,a.created ,a.lastSignin from areas as b left join student as a on a.areaid = b.areaid where a.source = 11 and a.status = 1 ),
|
|
accountNums as (select count(b.studentid) as num,a.areaid from areas as a left join accounts as b on a.areaid = b.areaid group by a.areaid ),
|
|
internalAccountNums as (select count(studentid) as num,a.areaid from areas as a left join accounts as b on a.areaid = b.areaid where b.lastSignin > #{startTime} and b.lastSignin < #{endTime} group by a.areaid
|
|
),
|
|
onlineAccount as (select b.uid, a.areaid , b.jmark->>'southLastSign'as lastSign from areas as a left join userhonor as b on a.areaid = b.areaid where b.jmark->>'southLastSign' notnull ),
|
|
onlineAccountNum as ( select count(uid) as num, areaid from onlineAccount group by areaid),
|
|
recentlyAccount as (select count(a.uid) as num, a.areaid from onlineAccount as a where a.lastSign >#{startTime} and a.lastSign < #{endTime} group by a.areaid),
|
|
activityDay as (select count(a.uid) as num, a.areaid from onlineAccount as a where to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') > now()- interval '1 day' and to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') < now() GROUP BY a.areaid ),
|
|
|
|
activityWeek as (select count(a.uid) as num, a.areaid from onlineAccount as a where to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') > now()- interval '1 week' and to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') < now() GROUP BY a.areaid),
|
|
|
|
activityMonth as (select count(a.uid) as num, a.areaid from onlineAccount as a where to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') > now()- interval '1 month' and to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') < now() GROUP BY a.areaid)
|
|
|
|
select a.areaId ,a.areaName ,sum(COALESCE(b.num,0)) as schoolNum,sum(COALESCE(c.num,0)) as accountNum,sum(COALESCE(d.num,0)) as onlineAccountNum ,sum(COALESCE(e.num,0)) as recentlyAccountNum,sum(COALESCE(i.num,0)) as internalAccountNums,sum(COALESCE(f.num,0)) as dayNum ,sum(COALESCE(g.num,0)) as weekNum ,sum(COALESCE(h.num,0)) as monthNum,case when sum(c.num) = 0 then 0 else COALESCE(ROUND(ROUND((sum(COALESCE(d.num,0))+0.0)/sum(c.num),5)*100,3),0) end as onlineRate from areas as a left join schoolCounts as b on a.areaid = b.areaid left join accountNums as c on c.areaid = a.areaid left join onlineAccountNum as d on a.areaid = d.areaid left join recentlyAccount as e on a.areaid = e.areaid left join activityDay as f on a.areaid = f.areaid left join activityWeek as g on a.areaid = g.areaid left join activityMonth as h on a.areaid = h.areaid left join internalAccountNums as i on a.areaid = i.areaid GROUP BY a.areaId ,a.areaName
|
|
</select>
|
|
|
|
|
|
<select id="southExamAreaStatistics" parameterType="SouthExamStatisticsSeachDto" resultType="SouthExamUseStatisticsDataForAreaDto">
|
|
with schools as (select a.schoolName ,a.schoolId,b.classesId ,b.className,b.created from school as a inner join classes as b on a.schoolid = b.schoolid and a.status = 1 and b.status = 1 where a.areaid= #{areaId} and b.areaid = #{areaId} and b.classtype =1 and b.source =11 order by a.schoolid desc),
|
|
|
|
classCount as (select classesId,count(classesId) as num from schools GROUP BY classesId),
|
|
|
|
accoutNums as (select count(b.studentId) as num,a.classesId from schools as a inner join studentownclass as b on a.classesid = b.classesId inner join student as c on c.studentId = b.studentId and c.areaid = #{areaId} and b.status = 1 and c.status =1 GROUP BY a.classesId),
|
|
|
|
internalClassesCount as (select count(a.classesId) as num,a.classesId from schools as a where a.created >#{startTime} and a.created <#{endTime} GROUP BY a.classesId),
|
|
|
|
|
|
students as (select c.studentId ,b.classesId ,c.created,c.lastSignin from studentownclass as b inner join student as c on c.studentId = b.studentId and c.areaid = #{areaId} and c.status =1 and b.status = 1 and c.source = 11 ) ,
|
|
|
|
internalAccountNums as (select count(c.studentId) as num,a.classesId from schools as a inner join students as c on c.classesId = a.classesId where c.lastSignin >#{startTime} and c.lastSignin <#{endTime} GROUP BY a.classesId),
|
|
|
|
onlineAccount as (select b.uid, a.classesId , b.jmark->>'southLastSign'as lastSign from schools as a inner join students as c on c.classesId = a.classesId inner join userhonor as b on c.studentId = b.uid where b.jmark->>'southLastSign' notnull ),
|
|
|
|
|
|
onlineAccountNum as ( select count(uid) as num, classesId from onlineAccount group by classesId),
|
|
|
|
recentlyAccount as (select count(a.uid) as num, a.classesId from onlineAccount as a where a.lastSign >#{startTime} and a.lastSign <#{endTime} group by a.classesId),
|
|
|
|
activityDay as (select count(a.uid) as num, a.classesId from onlineAccount as a where to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') > now()- interval '1 day' and to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') < now() GROUP BY a.classesId ),
|
|
|
|
activityWeek as (select count(a.uid) as num, a.classesId from onlineAccount as a where to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') > now()- interval '1 week' and to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') < now() GROUP BY a.classesId),
|
|
|
|
activityMonth as (select count(a.uid) as num, a.classesId from onlineAccount as a where to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') > now()- interval '1 month' and to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') < now() GROUP BY a.classesId)
|
|
|
|
|
|
select a.schoolId ,a.schoolName,sum(COALESCE(b.num,0)) as classNum,sum(COALESCE(c.num,0)) as accountNum,sum(COALESCE(d.num,0)) as internalClassesNum ,sum(COALESCE(i.num,0)) as internalAccountNums,sum(COALESCE(f.num,0)) as dayNum ,sum(COALESCE(g.num,0)) as weekNum ,sum(COALESCE(h.num,0)) as monthNum,COALESCE(ROUND(ROUND((sum(COALESCE(j.num,0))+0.0)/sum(c.num),5)*100,3),0) as onlineRate ,sum(j.num) from schools as a left join classCount as b on a.classesId = b.classesId left join accoutNums as c on c.classesId = a.classesId left join internalClassesCount as d on a.classesId = d.classesId left join recentlyAccount as e on a.classesId = e.classesId left join activityDay as f on a.classesId = f.classesId left join activityWeek as g on a.classesId = g.classesId left join activityMonth as h on a.classesId = h.classesId left join internalAccountNums as i on a.classesId = i.classesId left join onlineAccountNum as j on j.classesId = i.classesId GROUP BY a.schoolId ,a.schoolName
|
|
|
|
</select>
|
|
|
|
|
|
<select id="southExamSchoolStatistics" parameterType="SouthExamStatisticsSeachDto" resultType="SouthExamUseStatisticsDataForSchoolDto">
|
|
|
|
with classesForSchool as (select a.schoolName ,a.schoolId,b.schoolYear,b.classlevel,b.classesId ,b.className,b.created from school as a inner join classes as b on a.schoolid = b.schoolid and a.status = 1 and b.status = 1 where a.schoolid = #{schoolId} and b.classtype =1 and b.source =11 order by a.schoolid desc),
|
|
|
|
|
|
accoutNums as (select count(b.studentId) as num,a.classesId from classesForSchool as a inner join studentownclass as b on a.classesid = b.classesId inner join student as c on c.studentId = b.studentId and c.areaid = #{areaId} and b.status = 1 and c.status =1 GROUP BY a.classesId),
|
|
|
|
|
|
students as (select c.studentId ,b.classesId ,c.created,c.lastSignin from studentownclass as b inner join student as c on c.studentId = b.studentId and c.areaid = #{areaId} and c.status =1 and b.status = 1 and c.source = 11 ),
|
|
|
|
internalAccountNums as (select count(c.studentId) as num,a.classesId from classesForSchool as a inner join students as c on c.classesId = a.classesId where c.lastSignin > #{startTime} and c.lastSignin <#{endTime} GROUP BY a.classesId),
|
|
|
|
|
|
onlineAccount as (select b.uid, a.classesId , b.jmark->>'southLastSign'as lastSign from classesForSchool as a inner join students as c on c.classesId = a.classesId inner join userhonor as b on c.studentId = b.uid where b.jmark->>'southLastSign' notnull ),
|
|
|
|
|
|
onlineAccountNum as ( select count(uid) as num, classesId from onlineAccount group by classesId),
|
|
|
|
recentlyAccount as (select count(a.uid) as num, a.classesId from onlineAccount as a where a.lastSign > #{startTime} and a.lastSign <#{endTime} group by a.classesId),
|
|
|
|
activityDay as (select count(a.uid) as num, a.classesId from onlineAccount as a where to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') > now()- interval '1 day' and to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') < now() GROUP BY a.classesId ),
|
|
|
|
activityWeek as (select count(a.uid) as num, a.classesId from onlineAccount as a where to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') > now()- interval '1 week' and to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') < now() GROUP BY a.classesId),
|
|
|
|
activityMonth as (select count(a.uid) as num, a.classesId from onlineAccount as a where to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') > now()- interval '1 month' and to_date(a.lastSign,'YYYY-MM-DD HH24:MI:SS') < now() GROUP BY a.classesId)
|
|
|
|
|
|
|
|
select a.classesId ,a.className,a.classlevel,a.schoolYear,COALESCE(sum(c.num),0) as accountNum,sum(COALESCE(i.num,0)) as internalAccountNums,sum(COALESCE(f.num,0)) as dayNum ,sum(COALESCE(g.num,0)) as weekNum ,sum(COALESCE(h.num,0)) as monthNum,COALESCE(ROUND(ROUND((sum(COALESCE(j.num,0))+0.0)/sum(c.num),5)*100,3),0) as onlineRate from classesForSchool as a left join accoutNums as c on c.classesId = a.classesId left join recentlyAccount as e on a.classesId = e.classesId left join activityDay as f on a.classesId = f.classesId left join activityWeek as g on a.classesId = g.classesId left join activityMonth as h on a.classesId = h.classesId left join internalAccountNums as i on a.classesId = i.classesId left join onlineAccountNum as j on j.classesId = i.classesId GROUP BY a.classesId ,a.className,a.classlevel,a.schoolYear
|
|
|
|
</select>
|
|
|
|
|
|
<select id="getSouthUseData" parameterType="SouthExamStatisticsSeachDto" resultType="SouthExamUseDataStatistics">
|
|
|
|
with teachers as (select c.teacherId,c.trueName,c.loginNo,a.classesId ,a.className from school as b inner join classes as a on a.schoolid = b.schoolid inner join teacher as c on c.teacherId = a.teacherId and c.status = 1 where b.schoolid = #{schoolId} order by c.teacherId),
|
|
|
|
|
|
studentCount as (select count(a.classesId) as studentCount,a.classesId from studentownclass as a inner join classes as b on a.classesId = b.classesId where b.schoolid = #{schoolId} and a.status = 1 group by a.classesId),
|
|
|
|
|
|
studyCount as (select a.classesId,count(a.studentid) as finishCount from studentownclass as a inner join classes as b on a.classesId = b.classesId and b.status =1 inner join finishsouthstat as c on a.studentid = c.uid left join southexam as d on d.examid = c.examid where b.schoolid = #{schoolId} and a.status = 1 and d.created >#{startTime} and d.created < #{endTime} GROUP BY a.classesId ),
|
|
|
|
|
|
examCount as (select examId from southexam where created >#{startTime} and created < #{endTime})
|
|
|
|
select a.teacherId,a.trueName,a.loginNo,a.classesId ,a.className,case when (count(c.examId)*(d.studentCount)) = 0 then 0.00 else COALESCE(ROUND(ROUND((e.finishCount/(count(c.examId)*(d.studentCount)+0.0)),5)*100,3),0.00) end as completeDate , COALESCE((count(c.examId)*(d.studentCount)),0) as studyCount, COALESCE(e.finishCount,0) as finishCount, count(c.examId) examCount from teachers as a left join classownsouth as b on a.classesId = b.classesId LEFT join examCount as c on b.examId = c.examId left join studentCount as d on a.classesId = d.classesId left join studyCount as e on e.classesId = a.classesId GROUP BY e.finishCount,a.teacherId,a.trueName,a.loginNo,a.classesId ,d.studentCount,a.className order by a.teacherId
|
|
|
|
</select>
|
|
|
|
|
|
</mapper> |