sql的行转列
今天去面试,本来准备的东西完全没有问到,全部问的sql基础的东西,很尴尬的没有回答出来。记录一下。有三列数据,一列user,一列科目,一列分数,怎么得到user、科目名称。科目名称下为分数。其实就是考查行转列。
以mysql5.7为列,貌似没有pivot,使用case when吧
表student
| user | subject | score |
|---|---|---|
| 小明 | 数学 | 88 |
| 小明 | 语文 | 77 |
| 小明 | 英语 | 100 |
| 小刚 | 数学 | 88 |
| 小刚 | 语文 | 99 |
| 小刚 | 英语 | 60 |
select
user,
sum(subject1) "数学",
sum(subject2) "语文",
sum(subject3) "英语",
from
(select
user,
case `subject` when "数学" then score end subject1,
case `subject` when "语文" then score end subject2,
case `subject` when "英语" then score end subject3,
from
student) s
group by
user
结果
| user | 数学 | 语文 | 英语 |
|---|---|---|---|
| 小明 | 88 | 77 | 100 |
| 小刚 | 88 | 99 | 60 |
2万+

被折叠的 条评论
为什么被折叠?



