召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2415|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
6 T4 O/ c$ P( a5 ^% c0 J7 ]/ d要求查询结果如下 :7 G! y, {( N0 J" e' g- v# E

/ G5 X# |: v/ i+ o7 v3 h
* X* m, `# H5 y1 p. e1 Q) w0 ^# a创建数据库、表
% g5 m1 U2 d6 y; d& p- c8 t
  1. create database tests;
    ) W8 h2 R8 c1 {: A$ P/ c$ I& _
  2. use tests;
    : z8 y5 B: w5 `. w6 j/ c1 u
  3. create table t_score(  B. F7 l- Q) C2 v1 C& ^% {
  4. id int primary key auto_increment,
    + z1 R! s- {) w5 ~" U
  5. name varchar(20) not null,  #名字5 D( z1 W% ?3 z
  6. Subject varchar(10) not null, #科目
    % P/ ^9 i/ S) ~1 L2 ^
  7. Fraction double default 0  #分数9 t. M. i) V" ^8 ^# l" f  G
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES7 k) m+ t) r( _# ?, x) Y$ T
  2.          ('王海', '语文', 86),1 s1 h& v. u4 o4 m  n. x
  3.         ('王海', '数学', 83),' w9 J. \# J& G+ G
  4.         ('王海', '英语', 93),
    ' n, Z# |/ b9 Z$ ?8 F
  5.         ('陶俊', '语文', 88),
    9 N; |% `; V* \  q# W: L; G
  6.         ('陶俊', '数学', 84),
    ' x: L( \$ X5 F+ o* o
  7.         ('陶俊', '英语', 94),
    , ?* [! w; }: t) j- }7 [
  8.         ('刘可', '语文', 80),
    7 O6 ]0 M- j( i( R
  9.         ('刘可', '数学', 86),
    3 m) j) R) R; P' P
  10.         ('刘可', '英语', 88),0 S4 C7 @+ }% F* q
  11.         ('李春', '语文', 89),: ?# B4 l/ I; m
  12.         ('李春', '数学', 80),1 v( ^5 b4 N7 I& s) U9 L
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,
    5 s& F9 }3 t3 T
  2. sum(if(Subject='语文',Fraction,0)) as 语文,  @$ ~2 o" F2 Q+ ~- J
  3. sum(if(Subject='数学',Fraction,0))as 数学, / d: Q2 k$ f% K& f2 y( L
  4. sum(if(Subject='英语',Fraction,0))as 英语,* H, }+ O7 @4 l/ y. m
  5. round(AVG(Fraction),2) as 平均分,4 j- F' P5 k) N6 M' Z2 W
  6. SUM(Fraction) as 总分: c# ?/ H  W& ]: {, L
  7. from t_score group by name     ! g$ Q, |' w; ?0 a/ B
  8. union
      |( P: r3 h" x; I  o( ?
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(8 K3 C' ]: A4 z& J/ n
  10. select 'TOTAL' as name,
    0 ]4 U: E+ [  A: K" [
  11. sum(if(Subject='语文',Fraction,0)) as 语文,( X( U3 _! ?% F" m6 B0 A* a
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    - y. E  I$ ?0 D7 {
  13. sum(if(Subject='英语',Fraction,0))as 英语,. O% G' v; ], T8 G% v" w9 e
  14. SUM(Fraction) as 总分
    0 F) O. z5 i5 H7 ?9 k
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,: E3 t/ C- y6 f" e- g6 P. q
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,( M0 [' w- D% I. i5 Z, z
  3. sum(case when Subject = '数学' then Fraction end) as Math,! Z+ O' |7 G( I
  4. sum(case when Subject = '英语' then Fraction end) as English,/ k# C; B# w# j0 L8 u- r: Y5 T
  5. sum(fraction)as score
    . t. P2 x3 f. G) N2 n
  6. from t_score group by name5 s8 P% D. _0 ]6 d- o3 y5 E
  7. UNION ALL
    4 R  c7 u- X9 p
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(6 q4 e% g8 S- _3 i
  9. select 'TOTAL' as name,. V8 [) \& g" Y4 r3 ]
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,
    / X! G/ o3 I6 N9 z  s
  11. sum(case when Subject = '数学' then Fraction end) as Math,
    4 z, z2 z9 z% l0 t/ x
  12. sum(case when Subject = '英语' then Fraction end) as English,( W: r. e4 Y1 z' o
  13. sum(fraction)as score
    5 Q0 @; L; ?& ], h9 f, ~
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select
    & _6 U7 e. L: H, U
  2.         ifnull(name,'TOll') name,: k! M3 L1 J  ]4 b  o
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,$ L) J6 O  R9 D! P, O
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,
    - M* F7 [& S& l$ W1 `3 x
  5.        sum(if(Subject='数学',Fraction,0))as 数学,
    / q* k+ P$ K/ v7 c8 C* j4 E* \6 `
  6.        sum(Fraction) 总分
    # E7 n  e" r9 \& p9 n: X9 S
  7.         from t_score group by name with rollup
复制代码
查询结果如下:

3 E8 B3 m  b) I! m6 l0 ~
. E: R  r6 Y2 K. M/ @

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-24 19:13 , Processed in 0.038117 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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