召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2368|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
' [. F2 _  s; l! u4 K要求查询结果如下 :
/ c+ \5 g4 {8 N1 S9 S# E- ]
. k% l( y7 f* F  G
7 J" Y5 ~' d. ~* C( B% u0 W创建数据库、表
" s- ?) p5 a  K% J/ K6 b9 M
  1. create database tests;
    6 T9 d' ], ]2 k; p/ Z( I
  2. use tests;+ E- ~; W& n$ N  K- k2 C& n; B
  3. create table t_score(% k/ V  U# R& Z7 J
  4. id int primary key auto_increment,* r- Z& F4 D9 E3 M
  5. name varchar(20) not null,  #名字
    " D8 s- [2 e5 q; u
  6. Subject varchar(10) not null, #科目8 B4 o: c5 p) T8 N" n0 D
  7. Fraction double default 0  #分数/ e% g- C" e4 r" w5 b& ]/ h6 m
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES3 E, E; s6 g6 _; h) S$ |. i
  2.          ('王海', '语文', 86),8 e, W9 a  m4 i5 {' h
  3.         ('王海', '数学', 83),' o* U- Z8 v3 y7 c. e2 D
  4.         ('王海', '英语', 93),
    4 s% F% s$ ]  }" Y5 Y5 G" \
  5.         ('陶俊', '语文', 88),3 Q5 P# d# D$ A" z# z# x& E" d
  6.         ('陶俊', '数学', 84),
    , ]/ b8 ~9 l' [" Z
  7.         ('陶俊', '英语', 94),
    1 K" c& f8 n; C# ^/ E
  8.         ('刘可', '语文', 80),8 {; F; ?, g& q7 q' C4 \  ]
  9.         ('刘可', '数学', 86),& M! l" b* h: [; n( S
  10.         ('刘可', '英语', 88),
      z% s5 }9 N& w* i& h2 J
  11.         ('李春', '语文', 89),1 l* _! O- b' H; {# u
  12.         ('李春', '数学', 80),
    $ v. U. k: g5 Q) B
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,% S3 `  i& M, A( [; @, N) h/ r7 p
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    5 A" n2 E& b0 U  J* V, `- m
  3. sum(if(Subject='数学',Fraction,0))as 数学, $ u# I/ u+ W1 }. q; ], o. I
  4. sum(if(Subject='英语',Fraction,0))as 英语,
    / G  l7 Y* G. A. m9 f
  5. round(AVG(Fraction),2) as 平均分,6 |( o, G% b# m1 C/ A
  6. SUM(Fraction) as 总分$ t2 D% k/ s1 r2 ~7 B5 ^
  7. from t_score group by name     
    3 p, v% }' j  k: C6 R% P# ]
  8. union
    & }! `6 a! c& q7 Z- q6 H
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(
    + X+ _+ Z3 L) V+ s; K7 j' p& O6 ~
  10. select 'TOTAL' as name,
    * ]8 j  t9 ~1 B: I
  11. sum(if(Subject='语文',Fraction,0)) as 语文,' y9 }. P3 q% O7 B3 q) y- g' K
  12. sum(if(Subject='数学',Fraction,0))as 数学, ( Q6 T' T& U  `" W, A- O! J# _# S
  13. sum(if(Subject='英语',Fraction,0))as 英语,
    $ j, n3 D8 N! s. e9 J2 V
  14. SUM(Fraction) as 总分
    6 |8 j$ }2 K  ]9 t( k' H% M+ b; ~
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,9 X, T4 x8 o$ \2 ]8 Q
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,. D4 N2 s. ]' V6 u, d
  3. sum(case when Subject = '数学' then Fraction end) as Math,1 t; B# D0 j4 A& [
  4. sum(case when Subject = '英语' then Fraction end) as English,: y, D3 J6 [/ H1 E7 E" C+ M
  5. sum(fraction)as score
    1 E( k' F6 w: ]
  6. from t_score group by name
    * P& s+ H! `0 B3 g
  7. UNION ALL! T! k* ]4 w! ?2 R
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(! A. k. ~# ~+ _9 i5 U& Z
  9. select 'TOTAL' as name,
    5 T7 n1 t2 m# u; F
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,3 a7 }: q) ?& y9 a4 I5 X
  11. sum(case when Subject = '数学' then Fraction end) as Math," v3 I5 h3 Z7 M, h3 T
  12. sum(case when Subject = '英语' then Fraction end) as English,+ d7 s  g7 E7 Y$ o+ t9 ?
  13. sum(fraction)as score
    8 B$ Q6 w! h; n3 L+ P
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select
    " p! Q  ~. s. x0 W2 r
  2.         ifnull(name,'TOll') name,
    7 v8 p- }9 o+ p1 z7 f
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,. ]; Q" ^6 j8 K. ^9 x$ i
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,
      o! {; R4 {$ e; v& N& \5 u
  5.        sum(if(Subject='数学',Fraction,0))as 数学,
    ; U6 ^/ d5 J3 P
  6.        sum(Fraction) 总分
    - `( a8 W8 x/ U' b, H6 Q
  7.         from t_score group by name with rollup
复制代码
查询结果如下:

5 G2 k) V; u& H4 I5 J* y. \6 m4 p3 H+ b; g

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-26 05:20 , Processed in 0.035757 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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