select a.s_id,tmp1.s_score as chinese,tmp2.s_score as math,tmp3.s_score as english, round(avg (a.s_score),2) as avgScore from score a left join (select s_id,s_score from score s1 where c_id='01')tmp1 on tmp1.s_id=a.s_id left join (select s_id,s_score from score s2 where c_id='02')tmp2 on tmp2.s_id=a.s_id left join (select s_id,s_score from score s3 where c_id='03')tmp3 on tmp3.s_id=a.s_id group by a.s_id,tmp1.s_score,tmp2.s_score,tmp3.s_score order by avgScore desc;
时间: 2024-04-28 19:24:38 浏览: 99
这是一个 SQL 查询语句,用于查询学生成绩表中的数据,根据学生的 ID 分组,并统计每个学生的语文、数学、英语三门课的成绩以及三门课的平均成绩,并按照平均成绩倒序排序。
具体解释如下:
1. `select a.s_id, tmp1.s_score as chinese, tmp2.s_score as math, tmp3.s_score as english, round(avg(a.s_score), 2) as avgScore`: 选择要查询的字段,其中 `a.s_id` 表示学生 ID,`tmp1.s_score` 表示语文成绩,`tmp2.s_score` 表示数学成绩,`tmp3.s_score` 表示英语成绩,`round(avg(a.s_score), 2) as avgScore` 表示平均成绩,其中 `round()` 函数用于四舍五入保留两位小数。
2. `from score a`: 从成绩表 `score` 中选择数据,并使用别名 `a` 代替 `score` 表。
3. `left join (select s_id, s_score from score s1 where c_id='01') tmp1 on tmp1.s_id=a.s_id`: 使用左连接查询,把 `score` 表和 `c_id='01'` 的成绩表连接起来,并使用别名 `tmp1` 代替连接后的表,连接条件为 `tmp1.s_id=a.s_id`。
4. `left join (select s_id, s_score from score s2 where c_id='02') tmp2 on tmp2.s_id=a.s_id`: 同上,把 `score` 表和 `c_id='02'` 的成绩表连接起来,并使用别名 `tmp2` 代替连接后的表,连接条件为 `tmp2.s_id=a.s_id`。
5. `left join (select s_id, s_score from score s3 where c_id='03') tmp3 on tmp3.s_id=a.s_id`: 同上,把 `score` 表和 `c_id='03'` 的成绩表连接起来,并使用别名 `tmp3` 代替连接后的表,连接条件为 `tmp3.s_id=a.s_id`。
6. `group by a.s_id, tmp1.s_score, tmp2.s_score, tmp3.s_score`: 根据学生 ID 和三门课的成绩进行分组。
7. `order by avgScore desc`: 按照平均成绩倒序排序。
阅读全文