groupby username

This commit is contained in:
yuetsh committed 2024-06-04 09:15:37 +08:00
1 parent 8890f520eb
commit a2f0ce334e
1 file changed
+16 -3
+16 -3
View File
@@ -4,6 +4,7 @@ from judge.tasks import judge_task
from utils.api import APIView from utils.api import APIView
from ..models import Submission, JudgeStatus from ..models import Submission, JudgeStatus
from problem.models import Problem from problem.models import Problem
from django.db.models import Count, Q
class SubmissionRejudgeAPI(APIView): class SubmissionRejudgeAPI(APIView):
@@ -49,17 +50,29 @@ class SubmissionStatisticsAPI(APIView):
if username: if username:
submissions = submissions.filter(username__icontains=username) submissions = submissions.filter(username__icontains=username)
total_count = submissions.count() submission_count = submissions.count()
accepted_count = submissions.filter(result=JudgeStatus.ACCEPTED).count() accepted_count = submissions.filter(result=JudgeStatus.ACCEPTED).count()
try: try:
correct_rate = round(accepted_count/total_count*100, 2) correct_rate = round(accepted_count/submission_count*100, 2)
except ZeroDivisionError: except ZeroDivisionError:
correct_rate = 0 correct_rate = 0
counts = submissions.values("username").annotate(submission_count=Count("id", distinct=True),
accepted_count=Count("id", filter=Q(result=JudgeStatus.ACCEPTED), distinct=True),
).order_by("-submission_count")
data = []
for item in counts:
if item["accepted_count"] > 0:
rate = round(item["accepted_count"]/item["submission_count"]*100, 2)
item["correct_rate"] = f"{rate}%"
data.append(item)
return self.success({ return self.success({
"submission_count": total_count, "submission_count": submission_count,
"accepted_count": accepted_count, "accepted_count": accepted_count,
"correct_rate": f"{correct_rate}%", "correct_rate": f"{correct_rate}%",
"data": data,
}) })