召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2629|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:, O) D6 R; b. V( N1 J8 a
要求查询结果如下 :0 ]5 ^' v( e* s$ O
( m. Y; C# o2 ^6 A& T1 S, j
' W, q* {4 _6 e+ Q  v' Z
创建数据库、表; J5 S, }/ W9 R, |1 z# p4 W$ _
  1. create database tests;: @! `- F; v% r7 T# s) @9 M% o0 `
  2. use tests;$ a/ {6 E" a7 d! ?
  3. create table t_score(
      a1 Y& m, O/ S8 S& Q
  4. id int primary key auto_increment,
    . x  G1 l! c# I4 n. B9 H! j
  5. name varchar(20) not null,  #名字
    4 D& V. s3 ^1 f) U
  6. Subject varchar(10) not null, #科目
      g$ @9 e9 ~. @
  7. Fraction double default 0  #分数
    ; Y" C* ^/ q2 E% i# S) a9 |
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES
      G5 A' u/ e) B9 y
  2.          ('王海', '语文', 86),# o1 G! Y9 ^' c7 s
  3.         ('王海', '数学', 83),
    8 ~/ T% a- z/ Y1 @6 ]5 n# d
  4.         ('王海', '英语', 93),
    % E) J# U( o8 C0 n
  5.         ('陶俊', '语文', 88),
    , [! ?" [% \* B
  6.         ('陶俊', '数学', 84),
    3 l0 O" o) U8 Q
  7.         ('陶俊', '英语', 94),! w, h6 @9 }, _. p: P1 g2 E
  8.         ('刘可', '语文', 80),
    % _5 U/ J9 ^! Z# \% z& A4 E% @; X
  9.         ('刘可', '数学', 86),' L9 F/ Q& w! T9 Y4 W
  10.         ('刘可', '英语', 88),) @  ?& {: M1 b1 h" P
  11.         ('李春', '语文', 89),9 }' y: y9 X2 n7 h! k) R4 s7 k
  12.         ('李春', '数学', 80),
    * }- d) U- [* a5 N
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,4 g, b, g$ d% y' ?& r
  2. sum(if(Subject='语文',Fraction,0)) as 语文,1 M) p0 k' l2 C/ N& l" ~/ _$ d
  3. sum(if(Subject='数学',Fraction,0))as 数学,   K, U- m) q" x1 j: g* U
  4. sum(if(Subject='英语',Fraction,0))as 英语,
    0 x1 K& y# f% c0 f
  5. round(AVG(Fraction),2) as 平均分,
    5 @$ y# g; y) o, [. x# Y. T
  6. SUM(Fraction) as 总分$ B5 ?7 O! I+ Z; n0 F% A# _# h
  7. from t_score group by name     # M/ D6 i9 j; m: U" q( p
  8. union
    # c0 k* N2 q7 M; P. m6 J
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(' N+ I; [7 B' V- N6 M2 T. S% b
  10. select 'TOTAL' as name,8 H% m/ }" q$ ^( y% ^! p5 ^
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    8 b  l, P, @4 b
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    + S- ]3 \$ m; y& X  c
  13. sum(if(Subject='英语',Fraction,0))as 英语,
    $ e1 B. m& L/ v7 S
  14. SUM(Fraction) as 总分7 {- @3 {* Z0 h! i1 t4 d9 `
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,
    6 W5 a/ L0 Y6 R/ Y( w
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,
    . _* x; M2 M3 j6 E, O+ ~
  3. sum(case when Subject = '数学' then Fraction end) as Math,
    3 q, n; B1 }3 G6 o% B
  4. sum(case when Subject = '英语' then Fraction end) as English,
    7 H, Y- J3 X* C2 O' ]- I6 X
  5. sum(fraction)as score
    ) [% q1 v, k, {/ _) r( S
  6. from t_score group by name
    5 f; _  m: i4 @6 J" ]6 A* z7 r) Q
  7. UNION ALL
    4 o0 O3 G2 }7 t" ]
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
    ! H3 D9 M6 }: \$ E8 X
  9. select 'TOTAL' as name,
    * M$ d. U. v# g" [# l& w
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,1 [1 }# I# n( c2 ?2 y
  11. sum(case when Subject = '数学' then Fraction end) as Math,  ~3 Q! ?) v3 o: I+ V- C4 V
  12. sum(case when Subject = '英语' then Fraction end) as English,
    $ r/ H7 ~6 K  R, P5 u& |
  13. sum(fraction)as score
    # T) I" ]8 u, o& h
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select
    0 ^- U6 x1 C5 t" ^2 f
  2.         ifnull(name,'TOll') name,0 }- H: M) P: I1 R% `8 f
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,
    # s# q4 h* K$ n2 j& O9 k+ c
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,
    " \: q: D& T1 C+ y) L
  5.        sum(if(Subject='数学',Fraction,0))as 数学,; o4 J3 E& ?5 y8 Y, f
  6.        sum(Fraction) 总分$ o- R" L: V; h4 t' k5 ^6 T" b! }3 r
  7.         from t_score group by name with rollup
复制代码
查询结果如下:
1 Y) ]- ^9 B5 y6 Z1 _

& E' W4 I1 Q3 k2 S) C6 Y, }

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-5-13 04:47 , Processed in 0.035317 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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