召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 943|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
# H7 O5 {' t- e9 \' z要求查询结果如下 :: ]- ~7 u- v) p  N; l' o% M0 h; n! h

8 v) U: S" b1 a% v7 A$ j' M6 [" ]' K- x9 O  x
创建数据库、表) E% U/ X, b* ^! j8 I# ~
  1. create database tests;- s! c/ E- X: ^" ^8 Z% q
  2. use tests;
    * x" Q9 b2 m. l0 j$ y7 ~
  3. create table t_score(
    - ?1 N, ?! v3 `
  4. id int primary key auto_increment,2 B' ?; \6 c- I, T1 J
  5. name varchar(20) not null,  #名字
    " \9 n- E) K; P1 P" ?/ H  g/ }- c
  6. Subject varchar(10) not null, #科目
    " q3 J% @* x+ c- }5 L. ?6 |
  7. Fraction double default 0  #分数
    : Z- V$ c  }, W! h
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES( f1 ?  v8 }% |8 e
  2.          ('王海', '语文', 86),
    : X9 Y7 u+ `3 {7 u% X$ M
  3.         ('王海', '数学', 83),7 j1 s5 i3 {1 R9 b
  4.         ('王海', '英语', 93),' R; _; b/ e" e2 S- t1 z
  5.         ('陶俊', '语文', 88),
    1 s& U9 e6 T. J" C. l2 k0 A; s
  6.         ('陶俊', '数学', 84),1 \; ^* H6 }- K1 {! M9 r$ w, }! g
  7.         ('陶俊', '英语', 94),: K) D8 Q2 x8 Y8 s) O9 m9 p! ?5 A
  8.         ('刘可', '语文', 80),, Y# a! S0 ]" v- ]/ F
  9.         ('刘可', '数学', 86),
    ! B* ]% m: Y9 K9 K0 \
  10.         ('刘可', '英语', 88),
    0 i/ I, w4 J8 [8 `
  11.         ('李春', '语文', 89),% q7 b# O* ?) |) E
  12.         ('李春', '数学', 80),
    % |+ k# F# F2 |- e5 r# D
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,
    ! Z3 k0 s8 Z$ c
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    . {. X6 ^# I. B! O. Y
  3. sum(if(Subject='数学',Fraction,0))as 数学,   o* V+ M) X5 M' f' S2 }
  4. sum(if(Subject='英语',Fraction,0))as 英语,3 w3 w  D* L) w
  5. round(AVG(Fraction),2) as 平均分,5 |" L  f" G9 T0 @7 F. L* C4 `; O* E7 U
  6. SUM(Fraction) as 总分
    " H6 R2 U! }1 k+ K/ M$ z1 b
  7. from t_score group by name     
    * ~2 w) d- Q% z, k# q" c7 a8 D
  8. union8 \( i9 @9 ~: T+ j1 S' J% D: v$ `
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(
    + V. q. G+ z+ n/ W' a6 A
  10. select 'TOTAL' as name,
    ( x; N1 s" C( J8 v: e8 p+ r
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    2 x5 d; |( Q& X& i
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    2 w" G( S% l6 R. w/ @, B
  13. sum(if(Subject='英语',Fraction,0))as 英语,
    5 {0 O' a6 x  }8 m" D! H  X7 B- b/ A
  14. SUM(Fraction) as 总分
    8 d; L9 B+ u* b, e4 |
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,
    % G9 C9 }) I$ f3 `  N! D& [
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,( [$ O! V. x: o! M  {& O
  3. sum(case when Subject = '数学' then Fraction end) as Math,
    * @( z0 z3 J, e7 k
  4. sum(case when Subject = '英语' then Fraction end) as English,& d# h% W+ u2 G% B! I" f; r( O
  5. sum(fraction)as score3 Z/ O. m- M5 E  G& j7 ?3 t
  6. from t_score group by name
    ( G( k6 B" f1 d7 X
  7. UNION ALL
    " `3 z* L4 Z  i7 q/ w; }& o3 q
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
    8 e- j' I  `- W* l3 S- P6 f! ?8 ~
  9. select 'TOTAL' as name,
    * C, \5 }" x/ _& D' p% s2 ]
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,+ L& Y! q" x+ R
  11. sum(case when Subject = '数学' then Fraction end) as Math,* a' i6 }6 M( g& r
  12. sum(case when Subject = '英语' then Fraction end) as English,' i/ O8 v7 O6 g) C; J
  13. sum(fraction)as score
    5 y) f* A: e) _% H
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select
    0 f+ D3 D) y% M) r$ D8 w4 N1 {- d
  2.         ifnull(name,'TOll') name,
    ; y  \; v  ]3 v0 d7 t: b
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,1 m' {$ l! e% I3 r
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,
    ( t% T8 r( C1 t' M$ r+ g
  5.        sum(if(Subject='数学',Fraction,0))as 数学,
    & T6 M! C+ a( z: j( `. K
  6.        sum(Fraction) 总分1 J  b3 o/ D; G& E8 X/ g
  7.         from t_score group by name with rollup
复制代码
查询结果如下:

5 ~. O7 y- s/ @
7 |8 i6 k) g' b: @# Q* S8 }/ o

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-24 15:34 , Processed in 0.033841 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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