【发布时间】:2021-04-16 17:30:49
【问题描述】:
我有一个存储学生成绩并生成学生报告的学校管理系统
一个学生要通过他,她必须有;
- 平均60%或以上
- 英语达到 60% 或以上
- 在包括英语在内的 5 门科目中取得至少 60 %
我确实有查询来计算最好的 5 个科目并得出一个平均值。
但我需要我的查询能够检查及格科目的值,并计算学生已通过科目的数量(包括英语)并在一个查询中显示该信息强>
SELECT student_id, round((SUM(t.mark))/5) average_mark from (
select marks.student_id, ROUND(AVG(mark)) as mark from marks
INNER JOIN teaching_loads ON teaching_loads.id=marks.teaching_load_id
INNER JOIN subjects ON subjects.id=teaching_loads.subject_id
where marks.student_id = "520" AND marks.assessement_id=1
GROUP BY subject_id
order by (subject_id =2) desc, mark desc
LIMIT 5
)t ORDER BY round((SUM(t.mark))/5) DESC
我如何构建一个查询来检查通过科目的值并计算学生已通过科目的数量(包括英语)并在一个查询中显示该信息
类似
学生编号:89 通过_主题:6 通过_subject_mark:60
在一个查询中,我希望能够获取所有数据,我该怎么做? 请帮帮我。
以下是存储学生数据/分数的数据库及其相关表的架构。
Marks Table-Stores 学生成绩
CREATE TABLE `marks` (
`id` bigint(20) UNSIGNED NOT NULL,
`teacher_id` bigint(20) UNSIGNED NOT NULL,
`student_id` bigint(20) UNSIGNED NOT NULL,
`teaching_load_id` bigint(20) UNSIGNED NOT NULL,
`assessement_id` bigint(20) UNSIGNED NOT NULL,
`mark` int(11) NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
教学负荷
CREATE TABLE `teaching_loads` (
`id` bigint(20) UNSIGNED NOT NULL,
`teacher_id` bigint(20) UNSIGNED NOT NULL,
`subject_id` bigint(20) UNSIGNED NOT NULL,
`class_id` bigint(20) UNSIGNED NOT NULL,
`session_id` bigint(20) UNSIGNED NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
科目表
CREATE TABLE `subjects` (
`id` bigint(20) UNSIGNED NOT NULL,
`subject_name` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL,
`subject_type` enum('core','elective','non-value','passing_subject') COLLATE utf8mb4_unicode_ci NOT NULL,
`created_at` timestamp NULL DEFAULT NULL,
`updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
【问题讨论】:
标签: mysql sql database database-design