召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2364|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:: Y$ S) ]* q  ~0 K: B! C- L
要求查询结果如下 :. h- [- ^4 S+ J, O. T- w7 Q

- I3 o8 q2 S. o
  a( j  M; V0 L! B创建数据库、表6 I' e" X. L; W
  1. create database tests;
    8 }& `2 ^' K0 ?2 I6 G/ A
  2. use tests;
    ; g, I. c6 G* ?& P& ?6 `
  3. create table t_score(( {: ^1 p: w6 I6 `
  4. id int primary key auto_increment,
    + a, i0 S! f! G: u( H2 `
  5. name varchar(20) not null,  #名字8 {% u% x9 q+ f4 s' s
  6. Subject varchar(10) not null, #科目6 X5 e+ O2 V/ O) b6 J0 O) c3 l2 Z/ i
  7. Fraction double default 0  #分数
    - g- H* ^$ r1 \# W1 Q! W9 @
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES
    7 b7 W* E5 A: X6 i
  2.          ('王海', '语文', 86),
    $ G( V  N: P- ?9 R1 w
  3.         ('王海', '数学', 83),& c0 ]) i! I6 g! r  |
  4.         ('王海', '英语', 93),
    5 P+ x) k3 F: E4 \
  5.         ('陶俊', '语文', 88),3 y8 O5 u- W9 l! \& R! ^; Z
  6.         ('陶俊', '数学', 84),9 y, v/ b3 ], w+ Q  M  b
  7.         ('陶俊', '英语', 94),
    - W6 F7 @6 |, f2 {7 T9 K: s* J
  8.         ('刘可', '语文', 80)," U5 g$ F  ^8 e; U5 R0 t, V5 W
  9.         ('刘可', '数学', 86),: ]7 \1 g0 _6 L7 x6 r+ E9 e
  10.         ('刘可', '英语', 88),
    " e5 @9 ]1 `% j% k7 t- M) J
  11.         ('李春', '语文', 89),8 K3 }6 P* x. \& X
  12.         ('李春', '数学', 80),) D% v* H7 l9 N8 N2 g5 c
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,1 s3 L( a& |6 P$ O! I
  2. sum(if(Subject='语文',Fraction,0)) as 语文,% W$ R7 J0 B2 F2 B! P1 ?6 B
  3. sum(if(Subject='数学',Fraction,0))as 数学, % j8 r3 @& e1 P/ [' m7 T3 \8 k3 C
  4. sum(if(Subject='英语',Fraction,0))as 英语,& a9 V2 H# n; |( v8 |
  5. round(AVG(Fraction),2) as 平均分,
    6 `+ E- C" ^# m7 O3 I' m0 \
  6. SUM(Fraction) as 总分9 z) |. I" x& i! U
  7. from t_score group by name     & Q+ o2 F( R% {- I5 m6 I
  8. union
    ( Q1 r2 `/ \3 A7 z3 P- ^$ U
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(
    ) x- `9 r' {" |* C. a$ A# R
  10. select 'TOTAL' as name,
    1 |! k( }$ t. ], l
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    , u+ P5 |! z# ^) g9 s3 O6 V6 `
  12. sum(if(Subject='数学',Fraction,0))as 数学, & u4 S1 D6 P8 T- q' ]" W
  13. sum(if(Subject='英语',Fraction,0))as 英语,
    : B) h7 H" L: u! g
  14. SUM(Fraction) as 总分2 \6 q) b/ _+ M: ~4 H" A
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,: l3 W' T( Z  T, l: r4 R* r6 p
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,# u1 H& ]* n4 |4 B6 m8 U2 p( K# w+ D
  3. sum(case when Subject = '数学' then Fraction end) as Math,
    9 Q8 Q7 V: J- y/ e
  4. sum(case when Subject = '英语' then Fraction end) as English,
    8 }& s' }2 Y# b7 o) I( w
  5. sum(fraction)as score
      l, W) W% ^$ s% m8 Z& w- K
  6. from t_score group by name4 z8 `& t8 g/ t# h% E, s
  7. UNION ALL
    ( S0 E9 W1 d( o) f; N2 y
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
    ) F5 x' x$ w' D) F& n
  9. select 'TOTAL' as name,( s% g* R7 Z  U1 [- n! Y9 H
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,
    ; s9 m- m- s) M) f+ B# F" C
  11. sum(case when Subject = '数学' then Fraction end) as Math,
    8 W( R* j& q, G
  12. sum(case when Subject = '英语' then Fraction end) as English,
      F% q% ^; F0 L# R; n" q) ^+ y0 c! A; j
  13. sum(fraction)as score
    # t( s. f2 U! s: m. Z) p
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select
    6 h6 k5 w, [( h  R9 T$ `8 y
  2.         ifnull(name,'TOll') name,
    3 @, C6 [; S# q( ~3 b1 S4 Z: f
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,2 Q: @1 K  i5 n( q
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,3 U- p( O# a' L( l; o: W1 x
  5.        sum(if(Subject='数学',Fraction,0))as 数学,0 N9 A; |/ C4 w: N+ O
  6.        sum(Fraction) 总分, E6 j. @* P& y3 B
  7.         from t_score group by name with rollup
复制代码
查询结果如下:

- l6 f  N! e: g0 o
* V' q  D% y8 _6 x& }

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-21 15:55 , Processed in 0.038736 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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