diff --git a/mo/web/org_export.py b/mo/web/org_export.py index 82a6920895cb0d678e9e28e0c051df3d8c84ed9b..ebfaa58abc3a25b330383ac39f2c4ef2d2ddad11 100644 --- a/mo/web/org_export.py +++ b/mo/web/org_export.py @@ -158,26 +158,25 @@ def org_export_z_stats(year: int, seq: int): if not g.gatekeeper.rights_for_round(rnd).have_right(Right.view_contestants): continue for successful in [False, True]: - min_pts = rnd.points_step - if successful and rnd.score_successful_limit is not None: - min_pts = rnd.score_successful_limit reg = aliased(db.Place) - stats = (sess.query(reg, func.count(db.Participation.user_id)) + query = (sess.query(reg, func.count(db.Participation.user_id)) .select_from(db.Participation) + .filter(db.Participation.state == db.PartState.active) .join(db.Contest, db.Contest.contest_id == db.Participation.contest_id) .filter(db.Contest.round == rnd) .join(db.RegionDescendant, db.RegionDescendant.descendant == db.Contest.place_id) .join(reg, reg.place_id == db.RegionDescendant.region) - .filter(reg.level == 1) - .filter(sess.query(db.Solution) - .with_entities(func.sum(db.Solution.points)) - .select_from(db.Solution) - .filter(db.Solution.user_id == db.Participation.user_id) - .join(db.Task, db.Task.round == rnd) - .filter(db.Solution.task_id == db.Task.task_id) - .scalar_subquery() >= min_pts) - .group_by(reg.place_id) - .all()) + .filter(reg.level == 1)) + if successful and rnd.score_successful_limit is not None: + query = query.filter(sess.query(db.Solution) + .with_entities(func.sum(db.Solution.points)) + .select_from(db.Solution) + .filter(db.Solution.user_id == db.Participation.user_id) + .join(db.Task, db.Task.round == rnd) + .filter(db.Solution.task_id == db.Task.task_id) + .scalar_subquery() >= rnd.score_successful_limit) + query = query.group_by(reg.place_id) + stats = query.all() for reg, cnt in stats: data[rnd, reg, successful] = cnt