召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2366|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:3 |5 B; V- N, r0 i6 U7 O' Y2 A5 c$ g) j
要求查询结果如下 :
2 t1 z5 ^' P- ]9 i  ]# a2 H6 {! A1 X

8 l, q3 h( ^/ c5 M# t4 @1 Q# G+ {创建数据库、表* ^# X. j0 n6 w& ]- v0 S! _5 X
  1. create database tests;% r' T0 E8 ?0 L" R8 ?, x- S
  2. use tests;
    ) v  S9 j" L3 Y! O* O+ z% k
  3. create table t_score(
    $ L0 x$ d1 U! z; o
  4. id int primary key auto_increment,
    . \! N' T, v. t3 J- ^( @
  5. name varchar(20) not null,  #名字5 Y+ d! }* A) h
  6. Subject varchar(10) not null, #科目
    , e7 _' k2 Z3 a! }; I4 R$ H8 ?1 \
  7. Fraction double default 0  #分数
    & x. [! ^0 y8 S% }. x
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES) b- b, M- ]2 J
  2.          ('王海', '语文', 86),9 A) r1 O1 b1 ?; n
  3.         ('王海', '数学', 83),6 [( }! [5 @- }* V3 `1 W0 F: T
  4.         ('王海', '英语', 93),
    ; P5 M* g- K* }4 O2 }
  5.         ('陶俊', '语文', 88),% [4 ]4 y* _5 d7 P
  6.         ('陶俊', '数学', 84),
    7 _& y% o8 z# e8 p
  7.         ('陶俊', '英语', 94),2 {# C" ?+ M* g  E6 V
  8.         ('刘可', '语文', 80),1 E; z$ Z7 _/ g! C/ e0 Y$ O
  9.         ('刘可', '数学', 86),9 _: a% K" l2 |7 X; p- \
  10.         ('刘可', '英语', 88),
    5 P, s6 [8 J; _! o
  11.         ('李春', '语文', 89),) Z+ i/ ~; H* \9 n3 x9 d* C( F+ S
  12.         ('李春', '数学', 80),
    5 T( _4 D$ T( @/ }$ w; j) ^
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,3 L: t* \( M/ L. y
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    + M; F% u) q3 K# Q
  3. sum(if(Subject='数学',Fraction,0))as 数学,
    % t8 S, Y: W4 R
  4. sum(if(Subject='英语',Fraction,0))as 英语,
    6 L2 D; n* l0 H: n# A
  5. round(AVG(Fraction),2) as 平均分,
    , N) h' E& ?7 e7 D" d7 B
  6. SUM(Fraction) as 总分' \1 r- O8 o0 ~
  7. from t_score group by name     
    5 W. F0 @$ Q! S1 D
  8. union
    6 l$ T; y1 M( h* s0 t# M9 V
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(
    ; x+ p+ ]% K# w' L$ H4 a( a
  10. select 'TOTAL' as name,
    % x2 L# X* n$ o1 J9 a
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    ' @  @/ m( h* K/ |; j- Y
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    2 u3 b4 M* U1 t) A: `$ e
  13. sum(if(Subject='英语',Fraction,0))as 英语,9 Z5 T. L2 Q$ g. c% m$ f
  14. SUM(Fraction) as 总分1 Y) D. P4 R" V
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,
    $ M: f8 `' f0 `7 l
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,+ Z( ^* q7 _  T) p, g* N
  3. sum(case when Subject = '数学' then Fraction end) as Math," z* n; I& }# R% v
  4. sum(case when Subject = '英语' then Fraction end) as English,: q+ j7 W; ?0 B$ _
  5. sum(fraction)as score
    8 {2 ?( L- H; Y1 b# q1 h0 i
  6. from t_score group by name4 A7 b* p6 }" C+ o" S8 U: W* R
  7. UNION ALL1 ?  A6 j- F  \3 i4 v' H+ z! Z
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
    0 y. z2 L9 {0 j4 U# U/ W
  9. select 'TOTAL' as name,
    # Y" }2 z6 k! Y4 h: k% w5 \
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,
    ( t; [7 H) J' o/ a
  11. sum(case when Subject = '数学' then Fraction end) as Math,
    5 J4 P3 ]: |) _: G* p+ p6 i
  12. sum(case when Subject = '英语' then Fraction end) as English,
    0 [, t2 i8 e& o1 [' X8 B2 |
  13. sum(fraction)as score
    ' M' E: s# D6 V4 h
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select
    4 h, H7 Q% E  m/ ^9 x8 x. J
  2.         ifnull(name,'TOll') name,
    ( s+ G+ ?1 U/ k1 x% X+ _1 U$ r
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,2 `7 W: z3 V8 B. a
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,( z+ I" G/ |$ I/ P. m6 E
  5.        sum(if(Subject='数学',Fraction,0))as 数学,& x% c8 j' e9 r1 |
  6.        sum(Fraction) 总分
    0 z! \9 b: u/ j: r6 ?+ ^/ c7 W1 v) j
  7.         from t_score group by name with rollup
复制代码
查询结果如下:
6 P) j4 \, ]  E. }- K7 x

+ x( _, L, G" M# U0 b* L' u

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-24 16:08 , Processed in 0.051705 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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