diff --git a/src/Jiaowu.Api/Controllers/ClickHouseAnalyticsController.cs b/src/Jiaowu.Api/Controllers/ClickHouseAnalyticsController.cs index 89bb31b..d5771b8 100644 --- a/src/Jiaowu.Api/Controllers/ClickHouseAnalyticsController.cs +++ b/src/Jiaowu.Api/Controllers/ClickHouseAnalyticsController.cs @@ -61,13 +61,20 @@ public sealed class ClickHouseAnalyticsController( GROUP BY attendanceDate ORDER BY attendanceDate """, cancellationToken); var grades = await client.QueryAsync($""" - SELECT academicTermId, any(academicTermName) AS academicTermName, - sum(studentCount) AS studentCount, - round(sum(averageScore * studentCount) / nullIf(sum(studentCount), 0), 2) AS averageScore, - round(sum(passedCount) / nullIf(sum(studentCount), 0), 4) AS passRate - FROM {options.Database}.gradeStatistics FINAL - WHERE 1 = 1{collegeFilter} - GROUP BY academicTermId ORDER BY academicTermName + SELECT academicTermId, academicTermName, studentCount, + round(weightedScore / nullIf(studentCount, 0), 2) AS averageScore, + round(passedCount / nullIf(studentCount, 0), 4) AS passRate + FROM + ( + SELECT academicTermId, any(academicTermName) AS academicTermName, + sum(studentCount) AS studentCount, + sum(averageScore * studentCount) AS weightedScore, + sum(passedCount) AS passedCount + FROM {options.Database}.gradeStatistics FINAL + WHERE 1 = 1{collegeFilter} + GROUP BY academicTermId + ) + ORDER BY academicTermName """, cancellationToken); // Audit data has no college dimension, so it is never exposed to a