召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2371|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:6 z* M5 d% o  N) D8 x4 P. \
要求查询结果如下 :  M; H$ _$ m4 K

$ r% |- I7 n/ g" V+ {, p9 N* G/ N5 t8 R. t5 }7 l) _, P# o
创建数据库、表
* T% v9 M% G5 z; j* I
  1. create database tests;! u7 f' R# d8 X0 ?. c( h' M
  2. use tests;3 x/ H2 X( v/ R( O7 W, o
  3. create table t_score(
    ( h3 O8 y7 B  ]0 j
  4. id int primary key auto_increment,
    7 q- ~, m* Z  O' \2 f" N8 H
  5. name varchar(20) not null,  #名字
    4 r- r4 K6 P6 h: g; P- p* i) F
  6. Subject varchar(10) not null, #科目
    0 i8 T( b& r9 D3 n3 f
  7. Fraction double default 0  #分数
    2 W  }: @; {+ l3 ~& k
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES
    2 G6 H, \6 R3 o) Y. v
  2.          ('王海', '语文', 86),2 q9 X1 Z. e$ p: ?8 r3 X- }# L  \
  3.         ('王海', '数学', 83),
    6 t! Q: D7 k8 j' \
  4.         ('王海', '英语', 93),
    ; j" k$ e8 D4 m' z
  5.         ('陶俊', '语文', 88),
    0 g5 }" V2 K. ~2 C# ~. `% P
  6.         ('陶俊', '数学', 84),
    6 m! n6 D' |6 C2 d
  7.         ('陶俊', '英语', 94),( \* r* w$ B1 f9 Y' ]( t
  8.         ('刘可', '语文', 80),7 k. N, P4 B9 g1 ?% L
  9.         ('刘可', '数学', 86),' y2 ]% g, {* h2 E" P& U
  10.         ('刘可', '英语', 88),3 w# k9 k- J, }$ ?
  11.         ('李春', '语文', 89),9 K8 ~, O0 d$ _; z9 ~& E
  12.         ('李春', '数学', 80),
    8 ?% u& [3 O5 b1 T
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,, e: M! l0 j* L* N' p% b! h
  2. sum(if(Subject='语文',Fraction,0)) as 语文,/ \) A2 m" j" u+ O" A
  3. sum(if(Subject='数学',Fraction,0))as 数学, 6 _( W, R. e/ h- U" N" R
  4. sum(if(Subject='英语',Fraction,0))as 英语,$ D. k3 r2 v! T( ^
  5. round(AVG(Fraction),2) as 平均分,0 f% C4 d: J% y. r- I. f' D
  6. SUM(Fraction) as 总分
    ' S: ]3 m  U2 L/ S+ m* g
  7. from t_score group by name     
    : c  Q5 f- v* i0 x
  8. union7 {& H# |3 u5 w; B, R5 S+ T# V% [
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(
    " G7 l$ j* H, X; V8 |: z
  10. select 'TOTAL' as name," S9 E$ U& V! [4 T0 G9 R* i
  11. sum(if(Subject='语文',Fraction,0)) as 语文,7 D8 V9 ]9 d) m1 S& P
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    ( C) O9 Z) g8 \+ ~( W; ]* }2 R
  13. sum(if(Subject='英语',Fraction,0))as 英语,) }) A' J) L/ a& g! O
  14. SUM(Fraction) as 总分' L& U1 L3 i( `- b/ `1 W4 d/ D) _0 `
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,
    ) s/ i3 [0 d* H& G; V5 |& G
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,
    # c' r5 j( @2 H
  3. sum(case when Subject = '数学' then Fraction end) as Math,
    ! W1 G  l" T' T1 R. R6 t1 L) r# ^
  4. sum(case when Subject = '英语' then Fraction end) as English,- m/ K6 g) g$ {  d5 }" b8 E. Q
  5. sum(fraction)as score
    9 {$ v: O& h# u5 ]" F
  6. from t_score group by name
    3 U# k* W4 g# Y5 i7 [, t
  7. UNION ALL
    ; Y% m! ?  L% c
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
    % ]% R; f/ Q/ W1 i2 \3 a
  9. select 'TOTAL' as name,
    : p2 j- D, l) r7 M. X) _% ]
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,. \5 x! [, b2 n
  11. sum(case when Subject = '数学' then Fraction end) as Math,7 A1 v9 g0 N0 X( R* f5 D. p  Q
  12. sum(case when Subject = '英语' then Fraction end) as English,9 C* {& Q- L  j- P/ K% @# c
  13. sum(fraction)as score# L& _  _: f, ^. Z6 V" T
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select
    5 B0 c2 }8 `: X& K) q. U; ^
  2.         ifnull(name,'TOll') name,
    6 m! i3 r% g) j
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,
    # B* x* [* T! Y" }
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,+ }" L& G+ Z, V* r: G2 u
  5.        sum(if(Subject='数学',Fraction,0))as 数学,
    5 B# G0 k7 b8 p' x: H8 e# z
  6.        sum(Fraction) 总分
    7 g0 n7 O# }/ w
  7.         from t_score group by name with rollup
复制代码
查询结果如下:
2 B1 H- T9 r8 ?% E% q" H

0 d7 h! ?# L: X/ o3 t# K9 e, D5 G

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-28 01:08 , Processed in 0.036599 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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