召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 744|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
$ i; U+ V, y8 O3 U, @9 O) X要求查询结果如下 :6 q( Q- J/ M9 Y" `$ a( y

* C' w( ^6 `: e! A9 O2 |; a3 y5 M  _& m& P
创建数据库、表
9 m8 w$ J4 h% Y) i# c
  1. create database tests;1 t! m  u# w5 w9 P6 D: g
  2. use tests;
    & I# P. E" Q5 @9 B
  3. create table t_score(
    ; ]/ Q' H/ T& @7 V  I- {9 q0 L" q
  4. id int primary key auto_increment,
    & ]) W! {% d5 E8 l0 a1 T) A) V3 K
  5. name varchar(20) not null,  #名字
    4 U- q+ E2 v6 Z
  6. Subject varchar(10) not null, #科目
    ' T4 y, b$ @  Z& T! j8 M9 ]
  7. Fraction double default 0  #分数9 [: ?8 b2 i. E. y; l
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES1 [8 Y' M. U; @! h! |! C8 N' h
  2.          ('王海', '语文', 86),
    ; c  |, r# n1 V
  3.         ('王海', '数学', 83),
    % n. s) C8 W" U! T& `
  4.         ('王海', '英语', 93),
    1 p1 J! t$ b, Z- f! v& \% n
  5.         ('陶俊', '语文', 88),: v% f) N9 w. x$ n' D8 n2 y  ~
  6.         ('陶俊', '数学', 84),
    3 j- V1 z& U* j
  7.         ('陶俊', '英语', 94),
    0 ^. z* u( I2 [& X% r0 b4 }8 Y
  8.         ('刘可', '语文', 80),
    0 [/ J4 E- @# \; _
  9.         ('刘可', '数学', 86),
    * ]; u) F3 l# G3 ^" H  k1 t
  10.         ('刘可', '英语', 88),2 T* ]" C9 P+ {2 E( m# l
  11.         ('李春', '语文', 89),+ `, }( C# h% t( a; o8 v% m
  12.         ('李春', '数学', 80),
    ' o/ o' U! G/ S1 X$ G' R
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,* Z8 _: U$ s( y" w& T8 _8 t' T: v
  2. sum(if(Subject='语文',Fraction,0)) as 语文,; d) o0 g4 P2 N4 u
  3. sum(if(Subject='数学',Fraction,0))as 数学,
    & I4 |; Y) e- V9 @: l7 b' p
  4. sum(if(Subject='英语',Fraction,0))as 英语,' r4 x% W9 `4 d( M4 i" [
  5. round(AVG(Fraction),2) as 平均分,
    7 z  N  H; }3 n! M- @1 s6 m
  6. SUM(Fraction) as 总分
    6 M' t9 l# K7 l' f& g
  7. from t_score group by name     $ q9 u% M, h1 K$ Z6 f
  8. union
    ; [( K0 B& G$ I; e  ]
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(& |+ w' _  ~) j- |
  10. select 'TOTAL' as name,+ K/ U3 k& t9 T0 |; O" u: N
  11. sum(if(Subject='语文',Fraction,0)) as 语文,9 m4 f' l- r  r# e6 {
  12. sum(if(Subject='数学',Fraction,0))as 数学, # I$ |( e: v3 u& w) |
  13. sum(if(Subject='英语',Fraction,0))as 英语,
    6 n. j% t8 U% _$ l. L
  14. SUM(Fraction) as 总分
    3 R$ Y* `# U  K0 v% m8 @4 t
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,. x0 S4 e& j4 D' l0 @1 @9 i
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,2 m3 Z: `& W# B- Y
  3. sum(case when Subject = '数学' then Fraction end) as Math,
    ! l# y9 m. O% N" W
  4. sum(case when Subject = '英语' then Fraction end) as English,* i% Z5 y' y1 g" @9 }
  5. sum(fraction)as score
    . J1 v; H  Y) B. L
  6. from t_score group by name3 u3 r- W. m8 k' r- _. Z) O$ W
  7. UNION ALL2 O+ V% ]- U8 r' t( Y4 C2 o. W. c
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
    ' }! E0 I' u& R+ o
  9. select 'TOTAL' as name,
    * S- ^: n& d5 z. ^- G1 m' }* s
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,( T3 x" ^+ y' [$ l
  11. sum(case when Subject = '数学' then Fraction end) as Math,8 Z, w: J" Q+ `( h% t0 Z: W  `; M
  12. sum(case when Subject = '英语' then Fraction end) as English,
    " K8 @- C0 e4 Q( W% ~9 Y# n
  13. sum(fraction)as score& \# R5 }& ]  i1 m
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select
    1 @  [4 c, a  V, @; m0 D0 Y
  2.         ifnull(name,'TOll') name,7 j5 E! x. e( E3 _5 |
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,
    # I2 z. d4 e3 h2 F6 f$ p9 {
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,. \4 C3 @8 d* X1 o' B
  5.        sum(if(Subject='数学',Fraction,0))as 数学,& S! M4 W1 i+ Q3 d5 Z
  6.        sum(Fraction) 总分
      I2 u6 E# v2 O/ a5 k9 g
  7.         from t_score group by name with rollup
复制代码
查询结果如下:
( j1 j# D( q0 }1 j
6 r4 L1 q  ]6 t  a* ]: R! f9 X

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-2 13:56 , Processed in 0.030873 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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