请选择 进入手机版 | 继续访问电脑版

召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2484|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
/ D, u9 j/ E! v2 K- p, Z要求查询结果如下 :. a6 D8 W+ u$ J+ |/ m
) j) b/ o1 |3 {) M" [( P, ~% Z
% f- n# V( e- G$ `! M* H
创建数据库、表
% t# c6 }1 k% `0 d; g0 ^' ~
  1. create database tests;
    5 p, |, R, j6 x6 W2 e* F
  2. use tests;+ w# J4 _" T' u! ]& v0 h' @, |
  3. create table t_score(- W# ^9 k$ m5 \: V& S$ z% [
  4. id int primary key auto_increment,* ]0 Q/ N% ^$ F' Y1 c& M: `  t
  5. name varchar(20) not null,  #名字
      P8 p1 l: V" p6 G/ E( V: \2 d
  6. Subject varchar(10) not null, #科目
    " n; d8 g" E, O
  7. Fraction double default 0  #分数2 t0 [4 d: i0 _( t3 d& _
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES6 b  v6 }2 s* F) b
  2.          ('王海', '语文', 86),
    ) {* k5 p; H6 `2 q
  3.         ('王海', '数学', 83),
    ) ~/ y  g3 Y4 H( T
  4.         ('王海', '英语', 93),
    " R# e- ?* i: I. L! G
  5.         ('陶俊', '语文', 88),1 F1 C0 K* e# e3 @/ z; m/ s
  6.         ('陶俊', '数学', 84),1 Z4 u5 L8 Q5 h; s0 j  W: K( w* _! R+ r
  7.         ('陶俊', '英语', 94),+ C. E7 [; @! @. k! }) |  S9 V  H$ O
  8.         ('刘可', '语文', 80),
      q: q& r8 \( L
  9.         ('刘可', '数学', 86),
    ! e, l5 C$ t) S  z- c7 K5 t/ |; R; Z
  10.         ('刘可', '英语', 88),( R( q+ A. V: j1 T, V% K' A4 H
  11.         ('李春', '语文', 89),
    ! k. Q* B7 ]7 l. @5 {5 l
  12.         ('李春', '数学', 80),
    0 G8 z8 d, f- z+ @" _
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,
    ; K) a7 l6 Z/ n' P, \3 e
  2. sum(if(Subject='语文',Fraction,0)) as 语文,! V8 {2 n( ?& G
  3. sum(if(Subject='数学',Fraction,0))as 数学, + r4 B- t8 q  l  C, L
  4. sum(if(Subject='英语',Fraction,0))as 英语,
    & c( p. d0 R6 R5 b/ f3 R# }
  5. round(AVG(Fraction),2) as 平均分,/ m8 b" i0 z4 t* {  d7 _* v8 }
  6. SUM(Fraction) as 总分1 |4 ^. `3 i6 Z$ W
  7. from t_score group by name     " O$ M) A1 y, D# ?% I% C9 d
  8. union. B4 C0 E' F* }. I9 |
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(. b( {/ |5 ?5 T
  10. select 'TOTAL' as name,) g+ J) A4 \5 t! L& k6 u$ K- K
  11. sum(if(Subject='语文',Fraction,0)) as 语文,0 j8 E6 P% y+ e; u* @
  12. sum(if(Subject='数学',Fraction,0))as 数学, , w4 F# e% w  s  H) s
  13. sum(if(Subject='英语',Fraction,0))as 英语,& Q; P" t' f) E
  14. SUM(Fraction) as 总分0 S( J  z) j( I2 c- G$ P9 _* Y- u& `
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,
    % O' u% Z6 P" y7 ?: |* |6 }
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,; c! v' B. W' F- O
  3. sum(case when Subject = '数学' then Fraction end) as Math,
    % x- H, _- o$ m/ k7 e# M
  4. sum(case when Subject = '英语' then Fraction end) as English,/ H1 s! u9 t( O
  5. sum(fraction)as score
    2 m* {; c3 |* j7 k, G: V% a- j1 ~
  6. from t_score group by name. g" w' }9 [2 E! Q5 W* Z
  7. UNION ALL
    4 L5 P) q! G8 a. ?
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(# M3 t. m# N- z3 N) F
  9. select 'TOTAL' as name,3 L! I+ ]+ Y: p5 K3 ]
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,
    . V+ h0 ^* Q, A8 M
  11. sum(case when Subject = '数学' then Fraction end) as Math,: p  s. _4 ~' o* b% c$ k# [/ @- ^0 _
  12. sum(case when Subject = '英语' then Fraction end) as English,
      P3 {$ V3 @& P+ a! N
  13. sum(fraction)as score
    ' e! H4 A% z* j/ q8 |) U0 D
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select * g" f( W) `. V, A! A
  2.         ifnull(name,'TOll') name,
    # ~! c8 U9 T7 \. L& Z
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,
    3 }$ c' {/ D( _& f1 j3 S
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,' A7 m0 _: n( x) P3 D
  5.        sum(if(Subject='数学',Fraction,0))as 数学,% w( }/ N7 Z* W* E5 R1 \& J' f
  6.        sum(Fraction) 总分, l7 c# }1 l) |5 G
  7.         from t_score group by name with rollup
复制代码
查询结果如下:
1 i2 u( @6 d0 d
' y5 A* s4 y8 w% T3 s* f4 C% ?' H% y

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-8 23:59 , Processed in 0.033699 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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