召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2374|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
, Q+ L# }  |1 T要求查询结果如下 :" ]- c* U7 j2 q' z
' l  f' h3 G8 @
, X1 R7 N3 D/ @- C. J4 R+ `  S* _
创建数据库、表
3 H; O8 A6 Y# o3 B
  1. create database tests;: ~2 W+ X9 c8 I3 u; n+ C2 h5 z
  2. use tests;5 K4 |. [8 n: C# \% C6 @
  3. create table t_score(
    . i5 l7 A# m+ P/ b: ]+ w- Q2 V$ K
  4. id int primary key auto_increment,
    1 E& M) i$ m9 s* n4 x
  5. name varchar(20) not null,  #名字  B1 C# m, M8 r- k6 x2 {+ \* e+ y! L
  6. Subject varchar(10) not null, #科目
    * ]1 ~& T) l1 ~7 w3 ]/ X- `
  7. Fraction double default 0  #分数  e4 J" W' ?0 h0 ^) r8 S
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES
    0 F" d/ I" C$ R+ D! ~4 ]
  2.          ('王海', '语文', 86),3 R' v2 {& e1 U; ]
  3.         ('王海', '数学', 83),
    5 h* }1 f4 X* w
  4.         ('王海', '英语', 93),
    + V4 p; U% ]5 f( a9 w
  5.         ('陶俊', '语文', 88),6 v3 W" H) V$ n8 t  s1 I5 I* }( `
  6.         ('陶俊', '数学', 84),
    8 a  v" D+ O" M, U( p, P* i/ s/ E
  7.         ('陶俊', '英语', 94),# e- H& M6 m1 ?/ g: R( h
  8.         ('刘可', '语文', 80),/ J# M% b% Z# z: @
  9.         ('刘可', '数学', 86),
    - q& [# _$ w, }' g
  10.         ('刘可', '英语', 88),
      p8 I7 P5 |1 e
  11.         ('李春', '语文', 89),
    . U, v* U/ z: r4 H$ P* A
  12.         ('李春', '数学', 80),$ `$ C2 {% N; e
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,
    " R' c) i. O& J. S' d- E2 O
  2. sum(if(Subject='语文',Fraction,0)) as 语文,4 K* \- f1 g  y# |- v- h. h/ H
  3. sum(if(Subject='数学',Fraction,0))as 数学, 0 c0 m3 @( d& P! @
  4. sum(if(Subject='英语',Fraction,0))as 英语,4 q3 }( {! p" W' c8 h7 o4 X3 ]
  5. round(AVG(Fraction),2) as 平均分,9 y# F/ C, W8 w" a
  6. SUM(Fraction) as 总分
    7 _/ U* ^% R+ m* j7 F
  7. from t_score group by name     
    ( }0 ]/ s7 Y$ z) t: ^# Y( q7 ~
  8. union
    2 ?3 B1 d7 q7 t& p8 x1 n  Q
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(
    1 h6 w# ~/ R$ {0 G
  10. select 'TOTAL' as name,, B+ g; A3 s8 ]9 o6 E" A) @2 L
  11. sum(if(Subject='语文',Fraction,0)) as 语文,& q+ ]8 P6 Z) f: }5 d2 a0 M
  12. sum(if(Subject='数学',Fraction,0))as 数学, - g) {/ G1 K/ a; ~5 ]- a" }
  13. sum(if(Subject='英语',Fraction,0))as 英语,
    5 D0 p$ `. L7 Z4 v  J
  14. SUM(Fraction) as 总分
    / z/ x' n- t$ s! u* ~  k9 N
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,0 k8 Z: Z# D! x7 o% @& H
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,' _8 T: b) `$ r1 e' D1 F7 Y
  3. sum(case when Subject = '数学' then Fraction end) as Math,
      ^7 e, d" d! A" R7 K8 B
  4. sum(case when Subject = '英语' then Fraction end) as English,! S3 t' N# v1 U5 m$ @6 [# ?
  5. sum(fraction)as score
    5 ?( B$ T" }! D7 `$ b# k$ M
  6. from t_score group by name
    ( I: g% u* f: U" I) G
  7. UNION ALL7 X5 z2 J# {3 }( B' A
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
    % E1 B9 ]5 q* w+ f- n
  9. select 'TOTAL' as name,8 M0 R. ?, M  v5 W$ y- u
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,
    ; a1 j& \, _1 k1 Y% _5 W
  11. sum(case when Subject = '数学' then Fraction end) as Math,
    : b% Y/ q0 m8 V* g$ h+ s
  12. sum(case when Subject = '英语' then Fraction end) as English,
    4 ~3 `, [' O2 {
  13. sum(fraction)as score
    : k  E# g4 H( }+ S6 W
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select 6 y1 g1 v) M6 Z( ?% z
  2.         ifnull(name,'TOll') name,
    - V: ]( f: J5 c" l8 e
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,2 ?! S& R' X8 v/ O2 w8 D7 F$ n
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,
    + V7 o( e# c9 f
  5.        sum(if(Subject='数学',Fraction,0))as 数学,
    9 Y7 U) ~2 Q8 [, B4 G  @3 T% i' [: d
  6.        sum(Fraction) 总分) X+ Q! I0 J  C0 f. ^2 O
  7.         from t_score group by name with rollup
复制代码
查询结果如下:
5 e" f0 k: h- f/ Q3 E0 M

! _+ i2 o7 D: D- V

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-28 22:23 , Processed in 0.040096 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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