Skip to content
Snippets Groups Projects
Commit c5a48174 authored by Martin Mareš's avatar Martin Mareš
Browse files

Statistiky Z: Počítáme všechny aktivní účastníky

parent 5cf0e061
No related branches found
No related tags found
No related merge requests found
...@@ -158,26 +158,25 @@ def org_export_z_stats(year: int, seq: int): ...@@ -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): if not g.gatekeeper.rights_for_round(rnd).have_right(Right.view_contestants):
continue continue
for successful in [False, True]: 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) 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) .select_from(db.Participation)
.filter(db.Participation.state == db.PartState.active)
.join(db.Contest, db.Contest.contest_id == db.Participation.contest_id) .join(db.Contest, db.Contest.contest_id == db.Participation.contest_id)
.filter(db.Contest.round == rnd) .filter(db.Contest.round == rnd)
.join(db.RegionDescendant, db.RegionDescendant.descendant == db.Contest.place_id) .join(db.RegionDescendant, db.RegionDescendant.descendant == db.Contest.place_id)
.join(reg, reg.place_id == db.RegionDescendant.region) .join(reg, reg.place_id == db.RegionDescendant.region)
.filter(reg.level == 1) .filter(reg.level == 1))
.filter(sess.query(db.Solution) if successful and rnd.score_successful_limit is not None:
query = query.filter(sess.query(db.Solution)
.with_entities(func.sum(db.Solution.points)) .with_entities(func.sum(db.Solution.points))
.select_from(db.Solution) .select_from(db.Solution)
.filter(db.Solution.user_id == db.Participation.user_id) .filter(db.Solution.user_id == db.Participation.user_id)
.join(db.Task, db.Task.round == rnd) .join(db.Task, db.Task.round == rnd)
.filter(db.Solution.task_id == db.Task.task_id) .filter(db.Solution.task_id == db.Task.task_id)
.scalar_subquery() >= min_pts) .scalar_subquery() >= rnd.score_successful_limit)
.group_by(reg.place_id) query = query.group_by(reg.place_id)
.all()) stats = query.all()
for reg, cnt in stats: for reg, cnt in stats:
data[rnd, reg, successful] = cnt data[rnd, reg, successful] = cnt
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment