召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2387|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
0 A- p9 R  u6 V9 Y. W2 n要求查询结果如下 :/ C2 q7 `1 F0 J8 Y) I
6 |: P$ ^0 Z( ]3 _8 K
9 }( ]0 c% Q- r' q0 ?# u1 x
创建数据库、表9 O/ Z6 ^" p1 U) ]( m" X. q
  1. create database tests;; _* [! _5 Q$ l0 T( f
  2. use tests;
    # B' s6 L. Y8 g. A
  3. create table t_score() T) k  _7 |  L% X/ A
  4. id int primary key auto_increment,
    7 A5 t* }  s& K/ |  m
  5. name varchar(20) not null,  #名字
    * S. b9 p6 B. K# s
  6. Subject varchar(10) not null, #科目
    " s7 C6 c" a: b* j0 y; r
  7. Fraction double default 0  #分数6 {0 V# {1 K- |- L2 @, e
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES
    ; N, f9 N. v6 ~, i
  2.          ('王海', '语文', 86),  P( ~3 P; H. ~: |: M3 ^  t
  3.         ('王海', '数学', 83),; ~0 [4 S  M$ }
  4.         ('王海', '英语', 93),6 z! J2 Q7 f; E4 Y) \
  5.         ('陶俊', '语文', 88),. T4 G9 f% p) O
  6.         ('陶俊', '数学', 84),
    2 {( g/ h! h' h: z& A
  7.         ('陶俊', '英语', 94),
    9 q( m8 A5 T6 [9 J3 n, k8 q
  8.         ('刘可', '语文', 80),
    2 q3 w: s0 D  O: P! Y* }" |! J
  9.         ('刘可', '数学', 86),
    6 a) T: @4 V3 X' U7 }
  10.         ('刘可', '英语', 88),- ~% \5 p+ K# b& T6 w! |& V3 J6 N+ S
  11.         ('李春', '语文', 89),
    0 ^1 g2 Q# |2 A# c- f
  12.         ('李春', '数学', 80),* i9 [( \6 a. N  ^7 e8 F
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,% o0 Y3 |3 `; n& v+ l
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    & O; Z: I; Q' {% G
  3. sum(if(Subject='数学',Fraction,0))as 数学,   C- \- g; {% X. c1 c
  4. sum(if(Subject='英语',Fraction,0))as 英语,( \$ U# i3 ]5 o6 l
  5. round(AVG(Fraction),2) as 平均分,5 C0 {4 `, J* U4 `/ D1 M
  6. SUM(Fraction) as 总分
    6 z& J# R* g, n, f6 [
  7. from t_score group by name     # H3 R8 a" [; c0 z6 z
  8. union, A6 U1 `; [/ i& _2 X
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(
    ! v) }0 ~; Y; q* T# ^
  10. select 'TOTAL' as name,) I; m$ K9 h6 X% B: s; z4 G
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    + b; C) J* f# b8 c' Z
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    : b6 P& o9 h' ?; T% R) n
  13. sum(if(Subject='英语',Fraction,0))as 英语,+ @/ f- R0 V% b; V
  14. SUM(Fraction) as 总分
    1 N2 Y2 f7 s% S' ]" m) K1 e
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,! K; K3 U: k. m, d/ L
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,
    1 N" T# V& i' L) t' ]7 o
  3. sum(case when Subject = '数学' then Fraction end) as Math,4 S5 [& m- o+ c
  4. sum(case when Subject = '英语' then Fraction end) as English,: f. u- j1 _4 X  C; O; m8 B
  5. sum(fraction)as score
    5 d. r7 c' m+ {* M/ g' P
  6. from t_score group by name
    / M- K( X- s& u% y- d1 y4 |
  7. UNION ALL
      H+ P, D8 }4 Y7 y
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(* c! @% i0 `! b' ?9 h8 _4 w
  9. select 'TOTAL' as name,7 ]8 g: \% a+ C: ~; @
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,. ]; |% u4 X. a
  11. sum(case when Subject = '数学' then Fraction end) as Math,
    ( G4 a4 o. h- Z6 v) @0 ~; D- s
  12. sum(case when Subject = '英语' then Fraction end) as English,
    ) z& c6 A! i! O" a& p
  13. sum(fraction)as score
    4 ^. G. q' @, [3 }! O8 s' ~
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select
    5 _! d/ r# P9 k5 r! i2 e6 a9 b, A
  2.         ifnull(name,'TOll') name,
    - [- s: G$ P1 d. B# E
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,
    - F' ~/ Z4 ~  W/ A
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,
    0 N+ i: S2 E+ d6 [% G: H, w
  5.        sum(if(Subject='数学',Fraction,0))as 数学,) e; n9 c' |, h- A( G
  6.        sum(Fraction) 总分
    : H! N1 @) `0 i7 O7 R( G! \+ B
  7.         from t_score group by name with rollup
复制代码
查询结果如下:

! ?3 }) i% f5 g3 g: S9 E' |0 y0 j2 A2 O6 E6 ]) c

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-3 13:30 , Processed in 0.039496 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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