召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2782|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
3 r# C+ u  `# j" f  _# p要求查询结果如下 :
& L! n3 m; k8 ^! [! S$ ^  [( k0 X$ R
3 L$ W% b5 L( M7 r3 c3 E, `( J: u
7 ?9 O8 Z: D! S; I创建数据库、表: O6 R9 G' [) }7 H$ C
  1. create database tests;6 H1 C% I/ ?; h' ?$ a
  2. use tests;9 A" l/ Z- o+ D- q. V
  3. create table t_score(# f. {& T% |, H1 Z1 B! m6 O
  4. id int primary key auto_increment,1 y; R5 n, b1 ?3 o; V6 X
  5. name varchar(20) not null,  #名字
    . G9 }  p5 E7 h& \
  6. Subject varchar(10) not null, #科目  R0 h) p, ^% r& E& H
  7. Fraction double default 0  #分数
    / P# q8 j4 E1 [! \9 H* [$ i
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES/ X5 k' {" ^5 z/ j% y% K
  2.          ('王海', '语文', 86),5 V5 S9 Z3 J$ J5 r* z2 _/ J
  3.         ('王海', '数学', 83),
    . E  i' |# p, k3 A# Z2 @7 r& V
  4.         ('王海', '英语', 93),1 V4 C. `$ M) S1 Q2 `( G: o
  5.         ('陶俊', '语文', 88),0 Q+ c8 y# ]- a% p" s2 w3 J
  6.         ('陶俊', '数学', 84),# C8 f0 \; S- E8 f" M5 n2 Q5 p; f
  7.         ('陶俊', '英语', 94),$ H: m  D6 W. R( U
  8.         ('刘可', '语文', 80),' K# z7 e  G# T3 E. D$ l; l$ F" K! b
  9.         ('刘可', '数学', 86),
    4 E+ \( U0 M  F9 L8 J" D- P  y
  10.         ('刘可', '英语', 88),
    4 l$ G" v3 t# G. M& k
  11.         ('李春', '语文', 89),! Y  s$ G3 x7 ]! R9 D6 G4 o
  12.         ('李春', '数学', 80),
    . i1 {& U4 S/ Y
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,8 w: ^' l7 }- x" l5 P( A$ i' D+ j
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    8 L3 C; [& v+ j
  3. sum(if(Subject='数学',Fraction,0))as 数学,
    6 E/ |$ \0 {9 Z
  4. sum(if(Subject='英语',Fraction,0))as 英语,
    * L3 a" U& b& f7 {; R
  5. round(AVG(Fraction),2) as 平均分,
      ~/ w* |$ U2 T9 _( V4 O3 Y
  6. SUM(Fraction) as 总分$ w1 k$ \6 E2 Z
  7. from t_score group by name     
    & w+ r4 [/ p" F# b2 ]9 [
  8. union: N% J" [& k6 X2 e; |; a
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(, E1 F: f* f; L  r5 P
  10. select 'TOTAL' as name,
    $ a+ @1 X: d% B, I2 x+ |+ O
  11. sum(if(Subject='语文',Fraction,0)) as 语文,# T/ W" w, K# T4 r) Z; j
  12. sum(if(Subject='数学',Fraction,0))as 数学, 9 C0 H& F  j+ e" p( [
  13. sum(if(Subject='英语',Fraction,0))as 英语,
    - @% b; y2 I, @% |- Q( ~/ o/ Q' s
  14. SUM(Fraction) as 总分* D2 q5 O7 B4 W% N6 Z/ |
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,8 a- g) o, l! N* r: d! |6 u
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,
    . `" j" a0 \; L; D* j
  3. sum(case when Subject = '数学' then Fraction end) as Math,3 F  q4 A0 `- H* S1 w
  4. sum(case when Subject = '英语' then Fraction end) as English,6 P' ^5 n' i, \% r0 A
  5. sum(fraction)as score, a7 z; d) ?2 D: e* x
  6. from t_score group by name6 E5 s" I5 t8 e/ O- y: m
  7. UNION ALL# F$ E$ O. s* ]( M1 S0 e
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(- T" e) G- f2 Z/ Q2 u
  9. select 'TOTAL' as name,) m+ g1 r. X) P& G# U
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,
    6 R, B* F* J4 n" S$ s* P6 h: A
  11. sum(case when Subject = '数学' then Fraction end) as Math,
    8 d& Y  H; B# O4 @: H
  12. sum(case when Subject = '英语' then Fraction end) as English,
    5 a  w5 L! N- F& U( @) M9 h
  13. sum(fraction)as score6 _9 R- n. E$ S( c$ p' P0 ~: ?$ A0 a
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select 3 A- s4 T7 s8 B1 `" }0 q. A
  2.         ifnull(name,'TOll') name,
    / _/ G8 U9 P/ f2 Q+ O9 V' w
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,, X2 u" d& i2 V& W& k# q. o
  4.        sum(if(Subject='英语',Fraction,0)) as 英语," P2 v  j+ G0 [# o) T
  5.        sum(if(Subject='数学',Fraction,0))as 数学,
    6 J, O6 O% s% `% B' c6 v9 I
  6.        sum(Fraction) 总分& z# r& Z9 g; n- c8 G
  7.         from t_score group by name with rollup
复制代码
查询结果如下:
( p3 z1 v- P9 w, L! p
' m& z4 g4 a- J0 h+ w

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-17 05:02 , Processed in 0.033970 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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