From c5a48174678075ef1a2d3c162b88452e55757fb2 Mon Sep 17 00:00:00 2001 From: Martin Mares <mj@ucw.cz> Date: Sun, 26 Nov 2023 23:21:07 +0100 Subject: [PATCH] =?UTF-8?q?Statistiky=20Z:=20Po=C4=8D=C3=ADt=C3=A1me=20v?= =?UTF-8?q?=C5=A1echny=20aktivn=C3=AD=20=C3=BA=C4=8Dastn=C3=ADky?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- mo/web/org_export.py | 27 +++++++++++++-------------- 1 file changed, 13 insertions(+), 14 deletions(-) diff --git a/mo/web/org_export.py b/mo/web/org_export.py index 82a69208..ebfaa58a 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 -- GitLab