召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2266|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:5 \0 F: C- P, D1 y( x& Q
要求查询结果如下 :
5 d% W! e1 F& t4 c/ y
( \$ A* x$ O0 }9 z% n- D
3 X: c$ y: f1 a) G$ b. O) C* @创建数据库、表: q" F# i5 M  ?' T, j& b
  1. create database tests;$ c* o  Q' g  s! u8 n5 o6 o! a
  2. use tests;
    $ `  _; t& J# B
  3. create table t_score(; @, N3 Q* V( j/ q5 g4 h
  4. id int primary key auto_increment,8 M0 Z* L! H$ [! x7 C! y2 _5 B
  5. name varchar(20) not null,  #名字
    8 m2 ]# z8 x, ^: V4 v7 `" X
  6. Subject varchar(10) not null, #科目: R. a, S$ k. r/ t0 m
  7. Fraction double default 0  #分数6 o( G8 Y1 ^* Q
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES- A( T6 V2 p' F3 ?+ m
  2.          ('王海', '语文', 86),0 {% O$ _0 c2 V# h2 S
  3.         ('王海', '数学', 83),; \" E# y5 C- y5 J! C
  4.         ('王海', '英语', 93),
    $ A9 x" @- N( ]( ?
  5.         ('陶俊', '语文', 88)," U  {4 G1 ]5 }& _3 p$ s+ w. }
  6.         ('陶俊', '数学', 84),
    / s4 U7 q8 g  R$ q: o# x- [
  7.         ('陶俊', '英语', 94),
    % F( q3 z; s$ `  z
  8.         ('刘可', '语文', 80),% |! s* W3 C6 w+ \# L) J
  9.         ('刘可', '数学', 86),
    : V7 |# g& H* W% s) y
  10.         ('刘可', '英语', 88),
    6 J8 _- P5 a$ h; r  B9 ?  }& z' `
  11.         ('李春', '语文', 89),
    & L- r( t4 Y, ^4 k8 ]. ^' n
  12.         ('李春', '数学', 80),
    ) V( K! d9 ?% }9 j+ `
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,
    # a3 G% w' C$ e) L* g: r- J1 d
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    , x3 L5 |1 ?- p" B* O
  3. sum(if(Subject='数学',Fraction,0))as 数学, # D  m4 P- y1 J8 S& u- h
  4. sum(if(Subject='英语',Fraction,0))as 英语,
    0 l/ _, K: x6 B& I
  5. round(AVG(Fraction),2) as 平均分,0 X. u+ d0 y5 f' [5 J: ^3 _
  6. SUM(Fraction) as 总分" g# w$ @7 Q9 c
  7. from t_score group by name     
    7 }+ z2 F7 X( q
  8. union! V) _- L6 c8 v9 F* @
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(
    7 O* `* a$ A% ~, @5 ]( e& B& ~  D
  10. select 'TOTAL' as name,8 M- r  \. d$ q# g/ d& D% g/ g
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    - Y& G1 O7 H4 D9 P2 i: L: T3 @
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    ' v- A" x' Z% G/ z
  13. sum(if(Subject='英语',Fraction,0))as 英语,
    " G2 d  O1 n" F& ]3 S
  14. SUM(Fraction) as 总分+ ~8 ]1 W: @9 B, }  I8 l1 a
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,
    ) m, \4 o2 `$ t1 V
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,
    - ?- p7 c8 H: A! P+ y
  3. sum(case when Subject = '数学' then Fraction end) as Math,
    9 P9 V( i  T+ ?9 ?: _
  4. sum(case when Subject = '英语' then Fraction end) as English,: |  P! E  l! }, y1 J6 g0 }
  5. sum(fraction)as score
    $ h7 Z: B! F! i# l7 o
  6. from t_score group by name1 X6 E6 A8 G% \4 m; r
  7. UNION ALL
    / `+ M9 |, i/ O5 R$ p8 t0 h7 o
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(' Y! C/ R4 b' v" F/ [- @' I
  9. select 'TOTAL' as name,
    3 o% h2 J3 Q" o  J' G- ~
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,
    + e, y, u: M8 D
  11. sum(case when Subject = '数学' then Fraction end) as Math,- d; b% u" e! C, ^; Q
  12. sum(case when Subject = '英语' then Fraction end) as English,
    * E' `2 q( G2 c) D
  13. sum(fraction)as score7 O( j1 x5 z- G/ f7 n" D4 K" q
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select # N* S; k: T( n/ M0 j2 {
  2.         ifnull(name,'TOll') name,
    6 p% p) w: g# S( B1 B1 ]! i) Y7 a
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,
    . z5 o  R' Z$ O. D" y2 z) v
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,
    8 G5 @6 _; g. G' A5 @
  5.        sum(if(Subject='数学',Fraction,0))as 数学,) A: p/ _8 x3 o: W3 z
  6.        sum(Fraction) 总分
    " U: B5 b; o+ _& {. @# Z/ i  r
  7.         from t_score group by name with rollup
复制代码
查询结果如下:
- H$ A- m5 C6 U% G7 |, \

5 J! d; w1 `( P

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-31 02:13 , Processed in 0.033337 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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