From 930d8a7a1d8a541a9034203f23d0e8ebd133a76c Mon Sep 17 00:00:00 2001 From: xiongweiyi <460767058@qq.com> Date: Mon, 21 Sep 2026 17:10:05 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=20statistics.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- statistics.py | 105 -------------------------------------------------- 1 file changed, 105 deletions(-) delete mode 100644 statistics.py diff --git a/statistics.py b/statistics.py deleted file mode 100644 index 4c22bb2..0000000 --- a/statistics.py +++ /dev/null @@ -1,105 +0,0 @@ -from fastapi import APIRouter,Depends,HTTPException -from sqlalchemy.orm import Session -from sqlalchemy import func -from sqlalchemy_fastapi_demo.scheme.statistics import StudentAge, ClassCount, ScoreCount, ScoreAvg, Employment, EmploymentOff -from sqlalchemy_fastapi_demo.database import get_db -router = APIRouter() -from sqlalchemy_fastapi_demo.model.students import Student -from sqlalchemy_fastapi_demo.model.Score import Score -from sqlalchemy_fastapi_demo.model.employment import EmploymentBase,EmploymentOffer -from sqlalchemy_fastapi_demo.model.c_lass import Classinfo -from fastapi import FastAPI, Depends, HTTPException, Query -from sqlalchemy.orm import Session - -from sqlalchemy_fastapi_demo.database import get_db -from sqlalchemy_fastapi_demo.dao.statistics import (students_age, class_statistics,score_above, score_fail, -avg_scores,top_salary,stu_every,class_avg) -# app = FastAPI(title="统计接口") - -# -动态年龄范围查询**:支持用户输入年龄阈值及比较条件(如大于、小于、等于、区间等),动态查询符合条件的学员信息。 -@router.get("/students/age") -def api_students_age(op: str = Query(..., description=">, <, =, >=, <=, between"), - age_value: int = Query(None),age_min: int = Query(None), - age_max: int = Query(None),db: Session = Depends(get_db)): - try: - rows = students_age(db, op, age_value, age_min, age_max) - except ValueError as e: - raise HTTPException(status_code=400, detail=str(e)) - return [{"stu_id": s.stu_id, - "stu_name": s.stu_name, - "age": s.age, - "gender": s.gender, - "class_id": s.class_id,} for s in rows] - -# 多维度班级统计**:统计每个班级的总人数,以及按性别(男、女)细分的人数分布。 -@router.get("/classes/statistics") -def api_class_statistics(db: Session = Depends(get_db)): - return class_statistics(db) - - -# - 查询每次考试成绩都在输入分数线(如80分)以上的学生的编号、姓名和成绩。 -@router.get("/scores/above") -def api_score_above( - score_input: int = Query(..., ge=0, le=100), - db: Session = Depends(get_db)): - rows = score_above(db, score_input) - return [{"stu_id": i[0], "stu_name": i[1], "exam_order": i[2], "score": i[3]} for i in rows] - -# - 查询有输入指定次数(如两次)以上不及格的学生的姓名、班级和不及格成绩明细。 -@router.get("/scores/fail") -def api_score_fail( - fail_times: int = Query(..., ge=1), - fail_score: int = Query(60, ge=0, le=100), - db: Session = Depends(get_db)): - rows = score_fail(db, fail_times, fail_score) - return [{"stu_name": i[0], "class_id": i[1], "exam_order": i[2], "score": i[3]} for i in rows] - -# 统计每次考试每个班级的平均分,并支持按分数从高到低或从低到高动态排序 -@router.get("/scores/avg") -def api_avg_scores(order: str = Query("desc", pattern="^(asc|desc)$"), - db: Session = Depends(get_db)): - a = avg_scores(db, order) - return [{"exam_id": i.exam_id, - "class_id": i.class_id, - "avg_score": round(float(i.avg_score), 2)} for i in a] - -#就业统计 -# - 统计就业薪资排名 Top N(动态输入 N)的学生的姓名、班级、就业时间和就业公司。 -@router.get("/employment/top") -def api_top_salary(n: int = Query(5, ge=1), db: Session = Depends(get_db)): - return top_salary(db, n) - -# - 统计每个学生的就业时长(计算公式:offer下发时间 - 就业开放时间)。 -@router.get("/employment/every") -def api_stu_every(db: Session = Depends(get_db)): - return stu_every(db) - -# 每个班级的平均就业时长 -@router.get("/employment/class_avg") -def api_class_duration(db: Session = Depends(get_db)): - return class_avg(db) - - - - - - - - - - - - - - - - - - - - - - - - -