我有以下表结构
+---------+----------+-------+------------+------------+
| Student | Subject | Grade | Marks | YearID |
+---------+----------+-------+------------+------------+
| John | English | A | 80 | 15 |
| John | French | C | 94 | 15 |
| Mike | English | A | 31 | 15 |
| Mike | French | C | 73 | 15 |
+---------+----------+------+------------+------------+
我的问题是我在MySQL中需要这样的东西
+---------+----------+------+----------+
| Student | English |French | YearID |
| John | 80 | 94 | 15 |
+---------+----------+------+----------+
MySQL脚本中的这个怎么做
答案 0 :(得分:1)
表格中每个Student
+ Subject
+ YearID
有行,但您只需要每Student
+ YearID
个结果行。这意味着您希望按Student
+ YearID
汇总数据和分组。然后使用CASE WHEN
访问正确的主题:
select
student,
case when subject = 'English' then marks end as english,
case when subject = 'French' then marks end as french,
yearid
from mytable
group by student, yearid;
这会为每个Student
+ YearID
提供一行,并选择英文列的英文记录和法文列的法文记录。由于表格中每Student
+ YearID
只能有一个英语和一个法语记录,我们甚至不需要汇总功能(例如SUM
或MAX
)这里。