召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2384|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
( i. N7 b! T7 _) m4 t" N要求查询结果如下 :; y4 V0 A1 o' n' U% @! y
3 }9 x; v( N7 @' ~/ N" q: j2 \

# P/ n  M( U- h4 X( V1 i' y/ H/ P创建数据库、表+ p1 C# i6 P5 @+ f5 w6 u" F- E
  1. create database tests;
    7 m% j" g" T$ X$ I: p9 r% T7 V# z
  2. use tests;
    " V- r% u  X8 }- _% J( j
  3. create table t_score(
    ' Q6 ~' p6 o: [8 S! I
  4. id int primary key auto_increment,% f! S+ Y  k" p0 i% r: Y. |
  5. name varchar(20) not null,  #名字
    9 \/ _6 t' g7 ]8 x0 L- U
  6. Subject varchar(10) not null, #科目
    : Z" i% x  e* _4 n% r' x% t
  7. Fraction double default 0  #分数/ \2 Y3 d* o# V% Z' y+ K* V
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES
    ! v- P" w2 {1 x4 S. M
  2.          ('王海', '语文', 86),7 l- @* ~! d! U; \- o/ y7 _
  3.         ('王海', '数学', 83),
    ' J$ }" e  C% f1 e$ _7 U
  4.         ('王海', '英语', 93),  V1 K4 S* C1 E
  5.         ('陶俊', '语文', 88),6 P2 v1 F  i/ B1 f, Z* p
  6.         ('陶俊', '数学', 84),& D& L' Y! M# m& y0 h' @# P
  7.         ('陶俊', '英语', 94),
    ( c! C% M; M( z: z6 m* p9 H
  8.         ('刘可', '语文', 80),
    ! L" q: h. ~' F3 B# s0 h
  9.         ('刘可', '数学', 86),
    6 S% w9 U& e) Q
  10.         ('刘可', '英语', 88),, _" J. q/ L, w" A2 L2 v* ~; p. V
  11.         ('李春', '语文', 89),3 `4 h5 B# W* Z: w- n( [5 h: q
  12.         ('李春', '数学', 80),
    5 o; S8 u; n. C0 ?7 O
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,
      [9 B1 x9 q* H
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    7 a4 ~4 _, n( O" s4 W3 H
  3. sum(if(Subject='数学',Fraction,0))as 数学, : g/ Z& b. @# e" a1 M* L
  4. sum(if(Subject='英语',Fraction,0))as 英语,) j, ]8 B* F3 a2 m
  5. round(AVG(Fraction),2) as 平均分,% J4 N* V. I% w1 \/ i7 u" b
  6. SUM(Fraction) as 总分
    7 g) T9 f) a4 ^( G" r
  7. from t_score group by name     
    ' a, Q- c9 {# A
  8. union% |; p1 k+ b) m" r$ x; u* |
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(* ^' h0 r- H5 F% t% ^! [. w
  10. select 'TOTAL' as name,) |3 O1 O- s1 e  \) r
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    ! a7 p' e: H! |1 W9 U
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    ! v4 a9 F0 y: g* W
  13. sum(if(Subject='英语',Fraction,0))as 英语,+ w$ c, i  @0 @; P
  14. SUM(Fraction) as 总分+ T  A+ H( W8 h' b5 V% `% p
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name," {% m7 H- K8 V$ s# w
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,
    % C; y5 f8 f: I* I+ v+ j" d/ o4 I
  3. sum(case when Subject = '数学' then Fraction end) as Math,
    / ?! _" p+ t( y1 r  M6 ?
  4. sum(case when Subject = '英语' then Fraction end) as English,! S) g1 m9 _; C0 }% a# {2 J
  5. sum(fraction)as score
    # X! e5 ?9 o3 ?& r9 z+ D
  6. from t_score group by name/ x3 _7 y: E. T( z7 p
  7. UNION ALL
    + i, q3 K( P. u# C4 i7 \. X+ x
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(/ i2 @1 V5 {% R3 ?& X
  9. select 'TOTAL' as name,9 j+ M' w. y1 u; d
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,# i( Y5 G( Z% k
  11. sum(case when Subject = '数学' then Fraction end) as Math,# G, D5 S3 T5 g7 L
  12. sum(case when Subject = '英语' then Fraction end) as English,: S1 W7 `+ [5 H; J9 R
  13. sum(fraction)as score
    4 R, w6 ~0 z8 w! \
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select ' |7 U) q  C0 |6 R3 z1 S; w& y
  2.         ifnull(name,'TOll') name,. p1 h! U3 |+ @+ v) h9 C
  3.         sum(if(Subject='语文',Fraction,0)) as 语文," j& |, Q# K0 V7 M! A' _; E, S
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,
      I* k2 F0 B' M" U" i
  5.        sum(if(Subject='数学',Fraction,0))as 数学,& s; k0 X' X* N) I4 Z+ w: i
  6.        sum(Fraction) 总分
    " e- ?7 X: L6 j* _- I
  7.         from t_score group by name with rollup
复制代码
查询结果如下:
- N9 T- z2 t! I5 t, O8 `" S
* ^) N! Y! J/ c

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-2 22:03 , Processed in 0.033673 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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