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 |