表:stuscore
姓名name | 课程subject | 分数score | 学号stuid |
---|---|---|---|
张三 | 数学 | 89 | 1 |
张三 | 语文 | 80 | 1 |
张三 | 英语 | 70 | 1 |
李四 | 数学 | 90 | 2 |
李四 | 语文 | 70 | 2 |
李四 | 数学 | 80 | 2 |
1. 计算每个人的总成绩并排名
SELECT
NAME 姓名,
SUM(score) 总成绩
FROM
stuscore
GROUP BY
NAME
ORDER BY
总成绩 DESC
效果图:
姓名 | 总成绩 |
---|---|
李四 | 240 |
张三 | 239 |
- 列出各门课程最好的学生(要求显示字段: 学号、姓名、科目、成绩)
SELECT
t1.stuid,
t1. NAME,
t1. SUBJECT,
t1.score
FROM
stuscore t1,
(
SELECT
SUBJECT,
MAX(score) AS maxscore
FROM
stuscore
GROUP BY
SUBJECT
) t2
WHERE
t1. SUBJECT = t2. SUBJECT
AND t1.score = t2.maxscore;
效果图:
stuid | name | subject | score |
---|---|---|---|
1 | 张三 | 语文 | 80 |
2 | 李四 | 数学 | 90 |
2 | 李四 | 英语 | 80 |
3.统计如下:学号、姓名、语文、数学、英语、总分、平均分
SELECT
stuid 学号,
NAME 姓名,
sum(
CASE
WHEN SUBJECT = '语文' THEN
score
ELSE
0
END
) AS 语文,
sum(
CASE
WHEN SUBJECT = '数学' THEN
score
ELSE
0
END
) AS 数学,
sum(
CASE
WHEN SUBJECT = '英语' THEN
score
ELSE
0
END
) AS 英语,
SUM(score) 总分,
avg(score) 平均分
FROM
stuscore
GROUP BY
stuid,
NAME
ORDER BY
总分;
效果图:
学号 | 姓名 | 语文 | 数学 | 英语 | 总分 | 平均分 |
---|---|---|---|---|---|---|
1 | 张三 | 80 | 89 | 70 | 239 | 79.6667 |
2 | 李四 | 70 | 90 | 80 | 240 | 80.0000 |