Files
stu_teacher/dao/__pycache__/statistics_dao.cpython-310.pyc
T

98 lines
12 KiB
Plaintext
Raw Normal View History

2026-09-21 23:17:51 +08:00
o
Ü!±jÄIã
@súddlmZmZddlmZmZmZmZddlm Z ddl
m Z ddl m
Z
ddlmZddlmZddlmZmZe jd fe jd fe jd fe jd fe jd fe jd fe jd fe jd fe jd fe
jd fejd
fej d
fd œ Z!Gd d
„d
ƒZ"Gdd„dƒZ#dS)é)ÚListÚTuple)Úand_Úor_ÚfuncÚcase)ÚSession)ÚStudent)Ú Classinfo)ÚScore)ÚEmploymentBase)Ú
FilterRuleÚ FilterGroupFT) Ústu_idÚstu_nameÚageÚgenderÚ educationÚmajorÚ native_placeÚstatusÚclass_idÚ
class_nameÚsalaryÚ company_namec@sPeZdZe   d'dedededededeef dd „ƒZ ededee
fd
d „ƒZ eded e dee
fd
d„ƒZ
ed(deded e dee
fdd„ƒZed)dedededee
fdd„ƒZedededee
fdd„ƒZededee
fdd„ƒZededee
fdd„ƒZed*ded edee
fd!d"„ƒZed+ded$e dee
fd%d&„ƒZdS),Ú
StatisticsDAONÚdbÚopÚvalueÚ min_valueÚ max_valueÚreturncCsè| t¡ ttjtjk¡ tjdk¡}|dkr | tj|k¡}nL|dkr-| tj|k¡}n?|dkr:| tj|k¡}n2|dkrG| tj|k¡}n%|dkrT| tj|k¡}n|dkre| tj|ktj|k¡}ntd|›�ƒ‚|  tj¡ 
¡S) u]
动�年龄查询
:param op: 比较�件 gt/lt/eq/gte/lte/between
rÚgtÚltÚeqZgteZlteÚbetweenu ä¸�支æŒ�的年龄比较æ�¡ä»¶: ) Úqueryr Újoinr
rÚfilterÚ
is_deletedrÚ
ValueErrorÚorder_byÚall)rrrrr r&©r-úYC:\Users\Windows\WorkBuddy\2026-09-21-19-29-22\walin_student_system\dao\statistics_dao.pyÚstudents_by_age#s$
 ýzStatisticsDAO.students_by_agec Cs¶t ttjdkdfdd�¡}t ttjdkdfdd�¡}| tjtjt  tj
¡  d¡|  d¡|  d¡¡j ttjtjkd d
� 
tjdktjdk¡ tjtj¡ tj¡ ¡}d d „|DƒS)
u*统计æ¯�个ç�­çº§æ€»äººæ•°å�Šç”·å¥³åˆ†å¸ƒuç”·ér©Úelse_u女ÚtotalÚmaleÚfemaleT©ÚisoutercSs2g|]}|j|j|jp d|jpd|jpddœ‘qS)r©rrr3r4r5r8©Ú.0Úrr-r-r.Ú
<listcomp>Xsúûÿz4StatisticsDAO.class_gender_stats.<locals>.<listcomp>)rÚsumrr rr&r
rrÚcountrÚlabelr'r(r)Úgroup_byr+r,)rZmale_cntZ
female_cntÚrowsr-r-r.Úclass_gender_statsEs&ûù ôøz StatisticsDAO.class_gender_statsÚlinec
Csþ| tjtjtjt tj ¡ 
d¡t  tj ¡ 
d¡¡ 
ttjtjk¡ 
ttjtjk¡ tjdktjdk¡ tjtjtj¡ t  tj ¡|k¡ ¡}g}|D]1}| tj tj ¡ tj|jktjdk¡ tj ¡ ¡}| |j|j|j|j|jdd„|Dƒdœ¡qK|S)uT查询æ¯�次考试æˆ�绩都在 line 分以上的学生(按最低分è�šå�ˆåˆ¤æ–­ï¼‰Ú
exam_countÚ min_scorercSóg|] }|j|jdœ‘qS©©Úexam_idÚscorerH©r:Údr-r-r.r<…óz4StatisticsDAO.students_all_above.<locals>.<listcomp>)rrrrDrEÚscores)r&r rrr
rrr>r rIr?ÚminrJr'rr(r)r@Úhavingr,r+ÚappendrDrE)rrCrAÚresultr;Údetailsr-r-r.Ústudents_all_aboveds>ûóü úÿ
z StatisticsDAO.students_all_aboveçN@Ú min_timesc Csôttj|ktjdkƒ}| tjtjtj t
  tj ¡ 
d¡¡ ttjtjk¡ ttjtjk¡ tjdk|¡ tjtjtj ¡ t
  tj ¡|k¡ ¡}g}|D],}| tj tj¡ |tj|jk¡ tj ¡ ¡}| |j|j|j |jdd„|Dƒdœ¡qK|S)uM查询ä¸�å�Šæ ¼ï¼ˆ< line)次数 >= min_times 的学生å�Šå…¶ä¸�å�Šæ ¼æ˜Žç»†rÚ
fail_countcSrFrGrHrKr-r-r.r<«rMz/StatisticsDAO.fail_students.<locals>.<listcomp>)rrrrWZ fail_details)rr rJr)r&r rrr
rrr>rIr?r'rr(r@rPr,r+rQrW)rrVrCZ fail_condrArRr;rSr-r-r.Ú
fail_students‹s<üôü ûÿ zStatisticsDAO.fail_studentsÚdescrIÚordercCs¼t t tj¡d¡}| tjtjtj | 
d¡¡  t tj
t j
k¡  tt jtjk¡ tjdkt jdk¡ tjtjtj ¡}|durF| tj|k¡}| |dkrP| ¡n| ¡¡}dd„| ¡DƒS)u<统计æ¯�次考试æ¯�个ç�­çº§çš„å¹³å�‡åˆ†ï¼Œorder: asc/descéÚ avg_scorerNrYcSs&g|]}|j|j|jt|jƒdœ‘qS))rIrrr\)rIrrÚfloatr\r9r-r-r.r<Äsûüÿz0StatisticsDAO.class_exam_avg.<locals>.<listcomp>)rÚroundÚavgr rJr&rIr
rrr?r'r rr(r)r@r+rYÚascr,)rrIrZZavg_exprr&r-r-r.Úclass_exam_avg±s$üö ùzStatisticsDAO.class_exam_avgÚncCsp| tjtjtjtjtjtj¡ t tjt jk¡ 
tj dkt j dktjdk¡  tj 
¡¡ |¡ ¡}dd„|DƒS)u9薪资排å�� Top N(从就业基础表å�–最新薪资)rc Ss*g|]}|j|j|j|j|j|jdœ‘qS)©rrrÚjob_timerrrcr9r-r-r.r<ås ùúÿz,StatisticsDAO.top_salary.<locals>.<listcomp>)r&r rrrrdrrr'r r(r)r+rYÚlimitr,)rrbrAr-r-r.Ú
top_salaryÏs*úý ï ÷zStatisticsDAO.top_salaryc
CsZt tjtj¡}| tjtjtjtjtj|  d¡¡ 
tj dk¡  tj¡ 
¡}dd„|DƒS)ua就业时长 = offer下å�‘æ—¶é—´(job_time) - 就业开放时间(employment_open_time),å�•ä½�天Ú
duration_daysrc Ss<g|]}|j|j|j|j|j|jdurt|jƒnddœ‘qS)Néÿÿÿÿ)rrrÚemployment_open_timerdrg)rrrrirdrgÚintr9r-r-r.r<s
øùÿz6StatisticsDAO.employment_durations.<locals>.<listcomp>)rÚdatediffr rdrir&rrrr?r(r)r+r,)rrgrAr-r-r.Úemployment_durationsòs ú õ

öz"StatisticsDAO.employment_durationsc
CsÚt tj¡}t ttj d¡dfdd�¡}t t  ttj d¡t 
tjtj ¡fƒ¡d¡}|  t
jtj| d¡| d¡| d¡¡ ttjt
jk¡ tt
jtjk¡ t
jdktjdk¡ t
jtj¡ t
j¡ ¡}dd „|DƒS)
uŽå¹³å�‡å°±ä¸šæ—¶é•¿ï¼šä»…统计进入就业阶段(有就业开放时间)的学生;
å¹³å�‡å€¼ä»…对已拿到 offer 的学生计算Nr0rr1Ú opened_countÚ
offered_countÚavg_duration_dayscSsDg|]}|j|j|jp dt|jpdƒ|jdurt|jƒnddœ‘qS)rNç)rrrmrnro)rrrmrjrnror]r9r-r-r.r<1sú ûÿz4StatisticsDAO.class_avg_duration.<locals>.<listcomp>)rr>r rr=rrdÚisnotr^r_rkrir&r rr
rr?r'r(r)r@r+r,)rZopenedZofferedZavg_daysrAr-r-r.Úclass_avg_durations: 
þÿÿ÷ û óøz StatisticsDAO.class_avg_durationéÚtop_nc Csºt tj¡t tj¡ d¡}| tjtj t
j t tj¡ d¡t tj¡ d¡|¡  ttjtjk¡  t
tj
t
j
k¡ tjdktjdk¡ tjtj t
j ¡ | ¡¡ |¡ ¡}dd„|DƒS)uUæˆ�绩波动最大 Top N(最大分差 = 最高分 - 最低分,SQL è�šå�ˆè®¡ç®—)ÚdiffÚ max_scorerErc Ss.g|]}|j|j|j|j|jt|jƒdœ‘qS))rrrrvrEru)rrrrvrEr]rur9r-r-r.r<Rs ùúÿz2StatisticsDAO.score_volatility.<locals>.<listcomp>)rÚmaxr rJrOr?r&r rrr
rr'rr(r)r@r+rYrer,)rrtZ diff_exprrAr-r-r.Úscore_volatility=s(ú
ñ ÷zStatisticsDAO.score_volatilityçˆÃ@Úhigh_salary_linec
CsHt ttj d¡dfdd�¡}t tttj d¡tj|kƒdfdd�¡}| t j
t j t  t
j¡ d¡| d¡| d¡¡ t
t
j
t j
k¡jtttjt