召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2463|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
" }: w4 e' B  T1 ^6 P) L% S要求查询结果如下 :1 ?6 p: j" k% V: d7 z3 B
7 S1 ?& W* U% J2 j  x

% }9 a* E; f6 q. N% F4 m. @创建数据库、表4 L/ H3 \3 @1 m# F9 B6 `) e
  1. create database tests;
    5 @1 M# D/ H( l8 J* e) C4 i
  2. use tests;
    ) G: t! e6 w( ^9 a1 \5 _
  3. create table t_score() n: s4 t7 r2 k1 E5 q& {5 N
  4. id int primary key auto_increment,
    # a0 ~$ }( C1 _3 G
  5. name varchar(20) not null,  #名字6 M; p  Q! ?& Y7 @/ E$ T+ U+ N
  6. Subject varchar(10) not null, #科目( {' d1 u4 f4 o% S
  7. Fraction double default 0  #分数
    0 y! z$ y1 K) r# I* ^# Q; n
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES' e  ^% y! ]/ z& Q7 L( ~" X9 C
  2.          ('王海', '语文', 86),7 A8 O- O, h/ F8 V; g) k
  3.         ('王海', '数学', 83),6 i' u! P& i# X+ j; W
  4.         ('王海', '英语', 93),
    $ u; B% J5 q. }4 V. d% J
  5.         ('陶俊', '语文', 88),
    & j1 t: w* C4 |3 Q) C
  6.         ('陶俊', '数学', 84),# \2 M+ v) t& U& T
  7.         ('陶俊', '英语', 94),  i3 p% V! c# K* M1 Q# w9 D
  8.         ('刘可', '语文', 80),
    1 n, \4 P( \& b9 W& p5 c" H9 `4 b
  9.         ('刘可', '数学', 86),- D& E4 j1 k3 u) ~( G
  10.         ('刘可', '英语', 88),+ |( [, e! f0 v) H% W
  11.         ('李春', '语文', 89),
    ! z1 S" ]; ^+ u& ~
  12.         ('李春', '数学', 80),
    ( B3 j6 q9 f+ ~, n$ `
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,
    4 y( B9 z! c( m8 \
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    & f4 y  e9 e# z* G
  3. sum(if(Subject='数学',Fraction,0))as 数学, , J& u; a, @- l( r5 T
  4. sum(if(Subject='英语',Fraction,0))as 英语,8 j* x& `  q" {/ [) m4 |
  5. round(AVG(Fraction),2) as 平均分,
    . H' P; ^8 W- U. Y: N
  6. SUM(Fraction) as 总分
    - t  B2 u, C8 d- Q8 |+ Q5 u' L
  7. from t_score group by name     0 }( g- N6 f. w2 W) R5 [% l
  8. union( l/ W9 t0 S! ~/ y
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(
    1 ^% S2 G* i- U) A9 e' T' [7 ^
  10. select 'TOTAL' as name,: c- u+ q2 a9 V6 R. ^+ U
  11. sum(if(Subject='语文',Fraction,0)) as 语文,: g" z8 Q) r# L  X) y( I; W; G, \
  12. sum(if(Subject='数学',Fraction,0))as 数学,
      y4 ]9 Q: Q" V/ T! ~7 Y& i
  13. sum(if(Subject='英语',Fraction,0))as 英语," E3 P( d( U1 e. ~$ a* a9 y
  14. SUM(Fraction) as 总分! }( Y: H) K' J; }9 ~6 q& i
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,
    / J$ H* x3 L& _* R
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,
    - W2 \" f8 A0 n9 g6 v
  3. sum(case when Subject = '数学' then Fraction end) as Math,
    " ~! k/ X1 x2 M( v0 o- {
  4. sum(case when Subject = '英语' then Fraction end) as English,
      Z' C) |: q8 G3 K
  5. sum(fraction)as score% M. B) t) I7 t0 t/ S
  6. from t_score group by name
    6 M: c& S' \3 r5 h4 }' \% M+ j
  7. UNION ALL" b& V1 S& J- m
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
    9 U( Q0 A3 K7 L, \& G/ u; N
  9. select 'TOTAL' as name,
    # V% o. \0 x: a# n' O! I
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,
    ; V5 @3 v! m2 t" y3 v4 q
  11. sum(case when Subject = '数学' then Fraction end) as Math,. I$ d' b( r9 v  J
  12. sum(case when Subject = '英语' then Fraction end) as English,
    . A0 {+ ^% Y$ }+ K  p6 v
  13. sum(fraction)as score1 D: e4 V! U2 u0 Z
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select 3 [- F! q! M- ?. G
  2.         ifnull(name,'TOll') name,
    ( y+ f8 ^: U& Z7 J6 D* l
  3.         sum(if(Subject='语文',Fraction,0)) as 语文," l  j4 f4 V' C8 d: S' P7 {
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,! O) b( Z8 b% s  T9 l
  5.        sum(if(Subject='数学',Fraction,0))as 数学,8 w$ O' t! ^8 U& x- K8 J
  6.        sum(Fraction) 总分; j. X" E  ^; w( Z" W
  7.         from t_score group by name with rollup
复制代码
查询结果如下:
' c3 y1 T( t* h( \+ T( j7 H

0 ?. v) N* t9 s

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|召隆企博汇 ( 粤ICP备14061395号 )

GMT+8, 2026-2-11 14:00 , Processed in 0.055189 second(s), 36 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表