召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1339|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
6 ?$ V$ H$ o, J要求查询结果如下 :
4 E8 e- S. E3 u( F- R8 _* Q. f2 g* S$ u3 g8 A& U* w
3 i% B; O* ]  J3 L( i
创建数据库、表/ k, U! L7 t' I/ v3 W: c: X
  1. create database tests;
    + P* [  [, L/ ]$ T, M7 b
  2. use tests;
    5 s' l9 ^' f: V8 A! a. p
  3. create table t_score(  X6 F& g  f0 |  P, F* I
  4. id int primary key auto_increment,
    / h& U5 L0 L1 n6 e
  5. name varchar(20) not null,  #名字
    5 g/ u0 [* t7 V& J
  6. Subject varchar(10) not null, #科目! x; b* z& V8 ^9 J
  7. Fraction double default 0  #分数) l" z& h. @+ _( l) I& D, \
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES
    9 m; o) J  e+ ]3 Z
  2.          ('王海', '语文', 86),$ n7 c( y0 h* q- y
  3.         ('王海', '数学', 83),/ h0 Q" }9 e! w3 V/ `- }
  4.         ('王海', '英语', 93),
    4 ]( u2 ~7 [, I; _$ W! i+ S1 J/ l
  5.         ('陶俊', '语文', 88),
    / F9 J: r) G! @
  6.         ('陶俊', '数学', 84),5 t7 _5 d( C8 f. z" B
  7.         ('陶俊', '英语', 94),! y  {# Q( W: `; n: Z: `) Y* L
  8.         ('刘可', '语文', 80),
      @& }' x( E( c. e
  9.         ('刘可', '数学', 86),8 i4 L( B* B# h7 R6 u1 Y9 a
  10.         ('刘可', '英语', 88),
    ; g# m# ?7 T" p: v
  11.         ('李春', '语文', 89),
    * k: n! }( l$ E% G
  12.         ('李春', '数学', 80),- E- x0 G1 T" c0 L1 `
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,: ^- X+ c& ^$ t2 W. q/ k* w9 i, A, `2 o
  2. sum(if(Subject='语文',Fraction,0)) as 语文,1 E; q$ t& @) b$ L
  3. sum(if(Subject='数学',Fraction,0))as 数学,
    8 i1 G4 d3 I3 Q2 x! J6 X
  4. sum(if(Subject='英语',Fraction,0))as 英语,
    % n8 P& g3 A! H4 J
  5. round(AVG(Fraction),2) as 平均分,
    ' u$ H" f; y2 Z9 }+ J7 ], x
  6. SUM(Fraction) as 总分
    4 k. y6 ?6 O( a+ h. |0 n) C4 g7 B, a
  7. from t_score group by name       A6 e& P  l7 u! f
  8. union
    2 R& X5 m5 ]  j9 m8 n( w3 B
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(
    & x5 \( `+ |( l
  10. select 'TOTAL' as name,0 k+ B" r  C- {! s2 g! R
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    3 }2 \6 ~6 n) l$ n! S! C
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    $ J. r0 R0 S, _
  13. sum(if(Subject='英语',Fraction,0))as 英语," a1 m4 E, E: m+ L$ F2 w" Z4 E0 ]
  14. SUM(Fraction) as 总分4 ?: F' a7 z" {9 B  A9 r' G% ?
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,6 s3 V7 i& X. g, o" y  v
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,
    2 [! E" q; O: @+ M+ V& x/ P
  3. sum(case when Subject = '数学' then Fraction end) as Math,
    / i. ^* h. `4 [. X( }
  4. sum(case when Subject = '英语' then Fraction end) as English,
    + w3 E, M& x! n4 j" k& e, G
  5. sum(fraction)as score
    $ G: n7 U& R& e8 Z2 c
  6. from t_score group by name
    ) V% S+ |, q3 |1 Z7 w
  7. UNION ALL
    $ D3 g- {7 R  w0 d( d( N' G5 X
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(. r, V) n! _$ d0 j5 ?0 s
  9. select 'TOTAL' as name,9 _. B" |2 p6 Q4 W
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,
    " ~: x, F* o: R
  11. sum(case when Subject = '数学' then Fraction end) as Math,
    5 ^9 v1 w9 R  _, B3 f# @- o
  12. sum(case when Subject = '英语' then Fraction end) as English,& m4 J. \; q* c3 p7 ]& i* @
  13. sum(fraction)as score
    6 l8 |/ T; _5 Y: E% i5 M* W
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select 3 S" T; ~8 c& U7 z9 \7 N
  2.         ifnull(name,'TOll') name,
      s/ J$ K# T) J7 t
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,6 {- h0 v* k7 v- W( A( g  }' r
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,$ g) p# s9 ]8 `! d
  5.        sum(if(Subject='数学',Fraction,0))as 数学,, y* p! P5 L5 o( M8 }+ V
  6.        sum(Fraction) 总分
    6 R( [& t0 X4 e0 a0 l8 {. E. q
  7.         from t_score group by name with rollup
复制代码
查询结果如下:

+ X4 e. A+ ]4 E" p& t, T$ s
2 J+ n2 T  I6 b: g% i

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-2 02:11 , Processed in 0.031072 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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