성적처리 전체 쿼리튜닝
This commit is contained in:
parent
f1c986a2f6
commit
f08159828b
|
|
@ -966,7 +966,154 @@
|
|||
order by a.rno
|
||||
|
||||
</select>
|
||||
<select id="grade.lectgradesToAll" parameterClass="hashtable" resultClass="lect">
|
||||
|
||||
<!-- 성적처리 전체 튜닝 HS - (기존 롤백용 grade.lectgradesToAll_hsbk) -->
|
||||
<select id="grade.lectgradesToAll" parameterClass="hashtable" resultClass="lect">
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
|
||||
WITH
|
||||
filtered_lect AS (
|
||||
SELECT
|
||||
b.lectno, a.cmno, b.cmisno, b.userno, b.payno
|
||||
, b.isrebate, b.attrate, b.iscomplete, b.sdate, b.edate
|
||||
, a.cshape, e.eend, e.studyplace, p.payoktime
|
||||
FROM cm a
|
||||
INNER JOIN lect b ON b.cmno = a.cmno AND b.status = 1 AND b.ischanged = 0
|
||||
INNER JOIN cm c2 ON c2.cmno = a.pcmno
|
||||
INNER JOIN users u ON u.userno = b.userno
|
||||
INNER JOIN pay p ON p.payno = b.payno
|
||||
LEFT OUTER JOIN cminningscd e ON e.cmisno = b.cmisno
|
||||
LEFT OUTER JOIN assign ua ON ua.asno=u.asno
|
||||
WHERE 1=1
|
||||
AND a.ismaster = 0 AND a.isdel = 0
|
||||
<dynamic>
|
||||
<isEqual property="LeaveUserView" compareValue="N"><![CDATA[AND u.status < 99]]></isEqual>
|
||||
<isNotNull property="usernamestr"><![CDATA[AND u.username LIKE CONCAT('%', #usernamestr#, '%')]]></isNotNull>
|
||||
<isNotNull property="useridstr"><![CDATA[AND u.userid LIKE CONCAT('%', #useridstr#, '%')]]></isNotNull>
|
||||
<isNotEmpty property="usernameid"><![CDATA[AND (u.userid LIKE CONCAT('%', #usernameid#, '%') OR u.username LIKE CONCAT('%', #usernameid#, '%') OR u.usernameeng LIKE CONCAT('%', #usernameid#, '%'))]]></isNotEmpty>
|
||||
<isNotNull property="asname"><![CDATA[AND ua.asname LIKE CONCAT('%', #asname#, '%')]]></isNotNull>
|
||||
<isNotNull property="mobile"><![CDATA[AND CAST(AES_DECRYPT(UNHEX(u.mobile), 'np123@!') AS CHAR) LIKE CONCAT('%', #mobile#, '%')]]></isNotNull>
|
||||
<isNotNull property="cmno"><![CDATA[AND a.cmno = #cmno#]]></isNotNull>
|
||||
<isNotNull property="cname"><![CDATA[AND (c2.cname LIKE CONCAT('%', #cname#, '%') OR a.cname LIKE CONCAT('%', #cname#, '%'))]]></isNotNull>
|
||||
<isNotNull property="cnamestr"><![CDATA[AND a.cname LIKE CONCAT('%', #cnamestr#, '%')]]></isNotNull>
|
||||
<isNotNull property="cshape"><![CDATA[AND a.cshape = #cshape#]]></isNotNull>
|
||||
<isNotNull property="iscomplete"><![CDATA[AND IFNULL(b.iscomplete, 0) = #iscomplete#]]></isNotNull>
|
||||
<isNotNull property="cmisno"><![CDATA[AND b.cmisno = #cmisno#]]></isNotNull>
|
||||
<isNotNull property="studyplace"><![CDATA[AND e.studyplace = #studyplace#]]></isNotNull>
|
||||
<isNotEmpty property="edateall"><![CDATA[AND ((a.cshape <> 2 AND b.edate <= DATE_FORMAT(#edateall#, '%Y-%m-%d 23:59:59')) OR (a.cshape = 2 AND e.eend IS NOT NULL AND e.eend <= DATE_FORMAT(#edateall#, '%Y-%m-%d 23:59:59')) OR (a.cshape = 2 AND e.eend IS NULL AND b.edate <= DATE_FORMAT(#edateall#, '%Y-%m-%d 23:59:59')))]]></isNotEmpty>
|
||||
<isNotNull property="edate"><![CDATA[AND DATE_FORMAT((CASE WHEN a.cshape = 2 AND e.eend IS NOT NULL THEN e.eend ELSE b.edate END), '%Y-%m-%d') = #edate#]]></isNotNull>
|
||||
<isNotNull property="edate1"><![CDATA[AND (CASE WHEN a.cshape = 2 AND e.eend IS NOT NULL THEN e.eend ELSE b.edate END) >= #edate1#]]></isNotNull>
|
||||
<isNotNull property="edate2"><![CDATA[AND (CASE WHEN a.cshape = 2 AND e.eend IS NOT NULL THEN e.eend ELSE b.edate END) <= #edate2#]]></isNotNull>
|
||||
<isNotEmpty property="sdateall"><![CDATA[AND (CASE WHEN a.cshape = 0 AND b.isrebate = 0 THEN p.payoktime ELSE b.sdate END) >= DATE_FORMAT(#sdateall#, '%Y-%m-%d 00:00:00')]]></isNotEmpty>
|
||||
</dynamic>
|
||||
),
|
||||
aggregated_scores AS (
|
||||
SELECT
|
||||
fl.lectno, fl.cmno, fl.isrebate, fl.attrate
|
||||
, COUNT(DISTINCT CASE WHEN ex.extype = 0 THEN ex.exno END) AS ex0cnt, COUNT(DISTINCT CASE WHEN ex.extype = 0 THEN lex.lectno END) AS ex0lectcnt, AVG(CASE WHEN ex.extype = 0 AND ex.tpoint > 0 THEN IFNULL(lex.tpoint, 0) / ex.tpoint * 100 ELSE 0 END) AS ex0lectpoint
|
||||
, COUNT(DISTINCT CASE WHEN ex.extype = 1 THEN ex.exno END) AS ex1cnt, COUNT(DISTINCT CASE WHEN ex.extype = 1 THEN lex.lectno END) AS ex1lectcnt, AVG(CASE WHEN ex.extype = 1 AND ex.tpoint > 0 THEN IFNULL(lex.tpoint, 0) / ex.tpoint * 100 ELSE 0 END) AS ex1lectpoint
|
||||
, COUNT(DISTINCT CASE WHEN sd.sdtype = 0 THEN sd.sdno END) AS sd0cnt, COUNT(DISTINCT CASE WHEN sd.sdtype = 0 THEN lsd.lectno END) AS sd0lectcnt, AVG(CASE WHEN sd.sdtype = 0 AND sd.tpoint > 0 THEN IFNULL(lsd.cpoint, 0) / sd.tpoint * 100 ELSE 0 END) AS sd0lectpoint
|
||||
, COUNT(DISTINCT CASE WHEN sd.sdtype = 1 THEN sd.sdno END) AS sd1cnt, COUNT(DISTINCT CASE WHEN sd.sdtype = 1 THEN lsd.lectno END) AS sd1lectcnt, AVG(CASE WHEN sd.sdtype = 1 AND sd.tpoint > 0 THEN IFNULL(lsd.cpoint, 0) / sd.tpoint * 100 ELSE 0 END) AS sd1lectpoint
|
||||
, COUNT(DISTINCT CASE WHEN rs.rstype = 0 THEN rs.rsno END) AS rs0cnt, COUNT(DISTINCT CASE WHEN rs.rstype = 0 THEN lrs.lectno END) AS rs0lectcnt
|
||||
, COUNT(DISTINCT ci.cmino) AS at0cnt, COUNT(DISTINCT li.lectno) AS at0lectcnt
|
||||
FROM filtered_lect fl
|
||||
LEFT JOIN cmex ex ON ex.cmno = fl.cmno AND ex.isdel = 0 LEFT JOIN lectex lex ON lex.lectno = fl.lectno AND lex.exno = ex.exno
|
||||
LEFT JOIN cmsd sd ON sd.cmno = fl.cmno AND sd.isdel = 0 LEFT JOIN lectsd lsd ON lsd.lectno = fl.lectno AND lsd.sdno = sd.sdno
|
||||
LEFT JOIN cmrs rs ON rs.cmno = fl.cmno AND rs.rstype = 0 AND rs.isdel = 0 LEFT JOIN lectrs lrs ON lrs.lectno = fl.lectno AND lrs.rsno = rs.rsno
|
||||
LEFT JOIN cminning ci ON ci.cmno = fl.cmno AND ci.isonline = 0 AND ci.isscd = 1 LEFT JOIN lectinning li ON li.cmino = ci.cmino AND li.lectno = fl.lectno AND li.istatus = 2
|
||||
GROUP BY fl.lectno, fl.cmno, fl.isrebate, fl.attrate
|
||||
),
|
||||
final_scores AS (
|
||||
SELECT
|
||||
a.*
|
||||
, (a.attrate / 100) * (CASE WHEN a.isrebate = 1 THEN d.attendrfd ELSE d.attend END) AS apoint, (IFNULL(a.ex0lectpoint, 0) / 100) * (CASE WHEN a.isrebate = 1 THEN d.midrfd ELSE d.mid END) AS mpoint
|
||||
, (IFNULL(a.ex1lectpoint, 0) / 100) * (CASE WHEN a.isrebate = 1 THEN d.finalrfd ELSE d.final END) AS fpoint, (IFNULL(a.sd0lectpoint, 0) / 100) * (CASE WHEN a.isrebate = 1 THEN d.subjectrfd ELSE d.subject END) AS spoint
|
||||
, (IFNULL(a.sd1lectpoint, 0) / 100) * (CASE WHEN a.isrebate = 1 THEN d.discussrfd ELSE d.discuss END) AS dpoint
|
||||
, CASE WHEN (CASE WHEN a.isrebate=1 THEN d.attendcutrfd ELSE d.attendcut END) <= a.attrate THEN 1 ELSE 0 END AS ispassa
|
||||
, CASE WHEN (CASE WHEN a.isrebate=1 THEN d.midcutrfd ELSE d.midcut END) <= a.ex0lectpoint THEN 1 ELSE 0 END AS ispassm
|
||||
, CASE WHEN (CASE WHEN a.isrebate=1 THEN d.finalcutrfd ELSE d.finalcut END) <= a.ex1lectpoint THEN 1 ELSE 0 END AS ispassf
|
||||
, CASE WHEN (CASE WHEN a.isrebate=1 THEN d.subjectcutrfd ELSE d.subjectcut END) <= a.sd0lectpoint THEN 1 ELSE 0 END AS ispasss
|
||||
, CASE WHEN (CASE WHEN a.isrebate=1 THEN d.discusscutrfd ELSE d.discusscut END) <= a.sd1lectpoint THEN 1 ELSE 0 END AS ispassd
|
||||
, CASE WHEN (CASE WHEN IFNULL(d.isoffabs,0)=1 THEN IFNULL(a.at0cnt,0) ELSE 0 END) <= IFNULL(a.at0lectcnt,0) THEN 1 ELSE 0 END AS ispassat
|
||||
FROM aggregated_scores a
|
||||
INNER JOIN cmev d ON d.cmno = a.cmno
|
||||
)
|
||||
SELECT *
|
||||
FROM (
|
||||
SELECT
|
||||
fs.lectno, b.userno, b.payno
|
||||
, ROW_NUMBER() OVER(ORDER BY <isNotNull property="orderby">$orderby$</isNotNull><isNull property="orderby">c.cname, c.cmno, u.username</isNull>) rno
|
||||
, COUNT(fs.lectno) OVER() pagetotalcount
|
||||
, b.isrebate, CASE WHEN ppl.asname IS NOT NULL THEN ppl.asname ELSE ua.asname END asname
|
||||
, ppl.brno, ppl.ceoname, ppl.post, ppl.address1, ppl.address2, ppl.btype, ppl.bkind, ppl.eino, ppl.mname, ppl.association
|
||||
, CAST(AES_DECRYPT(UNHEX(ppl.mphone), <include refid="sql.digest" />) AS CHAR) mphone, CAST(AES_DECRYPT(UNHEX(ppl.taxemail), <include refid="sql.digest" />) AS CHAR) taxemail
|
||||
, u.username, u.userid, u.slevel, u.uduty
|
||||
, b.iscomplete, b.completetime, b.completeno, b.sdate, b.edate, c.studydays
|
||||
, CONCAT(SUBSTRING(CAST(AES_DECRYPT(UNHEX(u.userpno), <include refid="sql.digest" />) AS CHAR),1,6),'-',SUBSTRING(CAST(AES_DECRYPT(UNHEX(u.userpno),<include refid="sql.digest" />) AS CHAR),7,7)) userpno
|
||||
, CAST(AES_DECRYPT(UNHEX(u.mobile), <include refid="sql.digest" />) AS CHAR) mobile
|
||||
, b.cmisno, p.payoktime, p.payamt, c.cshape, c.sstime, c.cmno, c.cname, c.classno, c.studytime, t.tyear
|
||||
, cg.cgname, cg.pcgno, pcg.cgname AS pcgname, d.isoffabs
|
||||
, b.attrate, fs.apoint, fs.mpoint, fs.fpoint, fs.spoint, fs.dpoint
|
||||
, fs.ex0cnt, fs.ex0lectcnt, fs.ex0lectpoint, fs.ex1cnt, fs.ex1lectcnt, fs.ex1lectpoint
|
||||
, fs.sd0cnt, fs.sd0lectcnt, fs.sd0lectpoint, fs.sd1cnt, fs.sd1lectcnt, fs.sd1lectpoint
|
||||
, fs.rs0cnt, fs.rs0lectcnt, fs.ispassat
|
||||
, fs.ispassa, fs.ispassm, fs.ispassf, fs.ispasss, fs.ispassd
|
||||
, e.sseq, e.estart, e.eend, e.studyplace, f.istatus
|
||||
, cc.cname studyplacename, tm.cname typemanname, te.cname typeeduname
|
||||
, tg.cname typegradename, tj.cname typejobname
|
||||
, DATE_FORMAT((CASE WHEN c.cshape = 2 AND e.eend IS NOT NULL THEN e.eend ELSE b.edate END),'%Y-%m-%d') edatestring
|
||||
, pi.tbankuser rbankuser, pi.rbank, pi.pino, pi.rbankamt
|
||||
, CAST(AES_DECRYPT(UNHEX(pi.rbankaccnum), <include refid="sql.digest" />) AS CHAR) AS rbankaccnum
|
||||
, DATE_FORMAT(f.stime, '%Y-%m-%d') zstring3, cc2.cname AS zstring0
|
||||
FROM final_scores fs
|
||||
INNER JOIN lect b ON b.lectno = fs.lectno
|
||||
INNER JOIN pay p ON p.payno = b.payno
|
||||
INNER JOIN users u ON u.userno = b.userno
|
||||
LEFT OUTER JOIN assign ua ON ua.asno = u.asno
|
||||
INNER JOIN cm c ON c.cmno = b.cmno
|
||||
INNER JOIN cmev d ON d.cmno = c.cmno
|
||||
LEFT OUTER JOIN term t ON t.tmno = c.tmno
|
||||
LEFT OUTER JOIN cg cg ON cg.cgno = c.cgno
|
||||
LEFT OUTER JOIN cg pcg ON pcg.cgno = cg.pcgno
|
||||
LEFT OUTER JOIN payitem pi ON pi.payno = p.payno
|
||||
LEFT OUTER JOIN cminningscd e ON e.cmisno = b.cmisno
|
||||
LEFT OUTER JOIN lectinning f ON f.lectno = b.lectno AND f.cmino = e.cmino
|
||||
LEFT OUTER JOIN comcode cc ON cc.ccode = e.studyplace AND cc.isuse = 1
|
||||
LEFT OUTER JOIN pplog ppl ON ppl.pplno = p.pplno
|
||||
LEFT OUTER JOIN comcode cc2 ON ppl.typejobitem = cc2.ccode
|
||||
LEFT OUTER JOIN comcode tm ON tm.ccode = ppl.typeman
|
||||
LEFT OUTER JOIN comcode te ON te.ccode = ppl.typeedu
|
||||
LEFT OUTER JOIN comcode tg ON tg.ccode = ppl.typegrade
|
||||
LEFT OUTER JOIN comcode tj ON tj.ccode = ppl.typejob
|
||||
WHERE 1=1
|
||||
<dynamic>
|
||||
<isNotNull property="est1not"><![CDATA[AND fs.ex0lectcnt < fs.ex0cnt]]></isNotNull>
|
||||
<isNotNull property="est2not"><![CDATA[AND fs.ex1lectcnt < fs.ex1cnt]]></isNotNull>
|
||||
<isNotNull property="est11not"><![CDATA[AND fs.sd0lectcnt < fs.sd0cnt]]></isNotNull>
|
||||
<isNotNull property="est12not"><![CDATA[AND fs.sd1lectcnt < fs.sd1cnt]]></isNotNull>
|
||||
<isNotNull property="est21not"><![CDATA[AND fs.rs0lectcnt < fs.rs0cnt]]></isNotNull>
|
||||
<isNotNull property="ispasss"><![CDATA[AND ((fs.sd0cnt > 0 AND fs.sd0lectcnt > 0))]]></isNotNull>
|
||||
<isNotNull property="ispassa"><![CDATA[AND fs.ispassa = #ispassa#]]></isNotNull>
|
||||
<isNotNull property="ispassex"><![CDATA[AND (fs.ispassm = #ispassex# AND fs.ispassf = #ispassex#)]]></isNotNull>
|
||||
<isNotNull property="attendance">
|
||||
<isEqual property="attendance" compareValue="1"><![CDATA[AND IFNULL(d.isoffabs, 0) = 0]]></isEqual>
|
||||
<isEqual property="attendance" compareValue="2"><![CDATA[AND IFNULL(d.isoffabs, 0) = 1]]></isEqual>
|
||||
<isEqual property="attendance" compareValue="3"><![CDATA[AND IFNULL(d.isoffabs, 0) = 1 AND f.istatus IS NULL]]></isEqual>
|
||||
<isEqual property="attendance" compareValue="4"><![CDATA[AND IFNULL(d.isoffabs, 0) = 1 AND IFNULL(f.istatus, -1) = 2]]></isEqual>
|
||||
<isEqual property="attendance" compareValue="5"><![CDATA[AND IFNULL(d.isoffabs, 0) = 1 AND IFNULL(f.istatus, -1) = 0]]></isEqual>
|
||||
</isNotNull>
|
||||
</dynamic>
|
||||
) a
|
||||
<include refid="sql.pagedynamic" />
|
||||
ORDER BY a.rno
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
<!-- grade.lectgradesToAll 에 대한 백업 -->
|
||||
<select id="grade.lectgradesToAll_hsbk" parameterClass="hashtable" resultClass="lect">
|
||||
SET SESSION TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
|
||||
|
||||
select a.*
|
||||
from (
|
||||
select a.lectno,b.userno,b.payno
|
||||
|
|
@ -1349,6 +1496,8 @@
|
|||
order by a.rno
|
||||
|
||||
</select>
|
||||
|
||||
|
||||
<!--#xodus-->
|
||||
<select id="grade.lectgradesToAll2_old" parameterClass="hashtable" resultClass="lect">
|
||||
select *
|
||||
|
|
|
|||
Loading…
Reference in New Issue