查询所有学生的出生年份及至2019-01-01时的年龄; 查询所有课程中的最高分、最低分、平均分和及格率,按课程id升序输出。 Student表结构: 字段名 说明 s_id 学生id s_name 学生姓名 s_birth 学生生日 s_sex 学生性别 Course表结构: 字段名 说明 c_id 课程id c_name 课程名 Score表结构: 字段名 说明 s_id 学生id c_id 课程id s_score 学生成绩
时间: 2024-02-19 18:57:32 浏览: 170
查询所有学生的出生年份及至2019-01-01时的年龄的 SQL 查询语句如下:
```
SELECT s_birth AS birth_year, YEAR('2019-01-01') - YEAR(s_birth) AS age FROM Student;
```
查询所有课程中的最高分、最低分、平均分和及格率,按课程id升序输出的 SQL 查询语句如下:
```
SELECT c_id, MAX(s_score) AS max_score, MIN(s_score) AS min_score, AVG(s_score) AS avg_score,
COUNT(CASE WHEN s_score >= 60 THEN 1 ELSE NULL END)/COUNT(*) AS pass_rate
FROM Score
GROUP BY c_id
ORDER BY c_id ASC;
```
上述 SQL 语句中,`Student` 表包含学生信息,`Course` 表包含课程信息,`Score` 表包含学生成绩信息。
注意,以上查询语句仅供参考,具体实现可能需要根据具体数据库的语法进行调整。
相关问题
查询所有学生的出生年份及至2019-01-01时的年龄; 查询所有课程中的最高分、最低分、平均分和及格率,按课程id升序输出。
在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`升序排列。
查询所有学生的出生年份及至2019-01-01时的年龄; 查询所有课程中的最高分、最低分、平均分和及格率,按课程id升序输出。
第一个问题的 SQL 查询语句如下:
```
SELECT birth_year, YEAR('2019-01-01') - birth_year AS age
FROM students;
```
第二个问题的 SQL 查询语句如下:
```
SELECT course_id, MAX(score) AS max_score, MIN(score) AS min_score, AVG(score) AS avg_score,
SUM(CASE WHEN score >= 60 THEN 1 ELSE 0 END)/COUNT(*) AS pass_rate
FROM scores
GROUP BY course_id
ORDER BY course_id ASC;
```
注意,以上查询语句仅供参考,具体实现可能需要根据具体数据库的语法进行调整。
阅读全文