查询所有学生的出生年份及至2019-01-01时的年龄; 查询所有课程中的最高分、最低分、平均分和及格率,按课程id升序输出。
时间: 2024-10-23 08:13:11 浏览: 56
在SQL查询中,我们可以创建两个示例查询,分别对应这两个需求:
1. **查询学生出生年份及至2019年1月1日的年龄**
```sql
SELECT student_id, YEAR(CURRENT_DATE) - YEAR(birth_date) AS age
FROM students
WHERE DATE_SUB('2019-01-01', INTERVAL 1 DAY) <= birth_date;
```
这个查询将返回每个学生的ID和他们在2019年1月1日前的年龄。请注意,这里假设`birth_date`字段存储了学生的出生日期。
2. **查询课程成绩统计信息(最高分、最低分、平均分和及格率)**
```sql
WITH scores_summary AS (
SELECT course_id, MIN(score) AS min_score, MAX(score) AS max_score, AVG(score) AS avg_score,
COUNT(*) FILTER (WHERE score >= pass_threshold) / COUNT(*) * 100.0 AS pass_rate
FROM grades
GROUP BY course_id
)
SELECT * FROM scores_summary
ORDER BY course_id ASC;
```
在这里,我们首先通过子查询(`scores_summary`)计算每门课程的成绩统计,包括最低分(min_score), 最高分(max_score), 平均分(avg_score),然后计算及格率(pass_rate)(假设存在一个名为`pass_threshold`的阈值)。最后的结果会按`course_id`升序排列。
阅读全文