1.行转列sum+if/case when
由多行变一行,group by聚合,由一列变多列,衍生提前。
select uid, sum(if(course=’语文’,score,NULL)) as `语文`,
sum((if(course=’数学’,score,NULL)) as `数学`
from score group by uid;
2.列转行union
select uid, ‘语文’ as course,`语文` as score
from score where `语文` is not null
union
select uid, ‘数学’ as course, `数学` as score
from score where `数学` is not null
‘字符串常量’ `课程名`
3.自连接
select c.*,a.s_score s01,b.s_score s02
from score a, score b, student c
where
a.c_id=’01’
and b.c_id=’02’
and a.s_id=b.s_id
andc.s_id=a.s_id
and a.s_score>b.s_score;
原理同列转行
版权声明:本文为qq_59344662原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。