召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3010|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
4 Q6 V0 p; w, i& p3 F, ^2 {0 q要求查询结果如下 :
* g3 @/ E  B- Z( h& A
4 a; F0 s9 R& |% d
( {( s" [6 x3 R7 g& V创建数据库、表
- @( k7 U) y# _" B
  1. create database tests;. H: C. k# D8 M3 ]. Y- T9 G& i
  2. use tests;
    8 U' v6 {- l7 s! `
  3. create table t_score(0 `( E0 U% d% E" \, V
  4. id int primary key auto_increment,/ w* i) i5 h' g7 G
  5. name varchar(20) not null,  #名字
    ; q  q  `7 X& w( a, `. B
  6. Subject varchar(10) not null, #科目
    7 {' Q: q3 N' f- z. H% E
  7. Fraction double default 0  #分数+ s: M0 I6 N8 J# S! ]4 T
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES0 o$ M3 [' s2 m( E! P7 T/ h
  2.          ('王海', '语文', 86),( m. @4 w4 N8 @/ m+ y) x/ a: L
  3.         ('王海', '数学', 83),  m& L5 t: v$ I2 p
  4.         ('王海', '英语', 93),( o4 G: y  o0 r  I/ A$ A
  5.         ('陶俊', '语文', 88),
    2 l- l# l/ ]7 E& v; F
  6.         ('陶俊', '数学', 84),
    6 X" F- s9 H$ w4 J
  7.         ('陶俊', '英语', 94),
    6 d; z; F# C9 N- i
  8.         ('刘可', '语文', 80),
    6 r! J' X, K# d) m" q
  9.         ('刘可', '数学', 86),3 x/ l8 B% ^. _* m9 o  [$ s
  10.         ('刘可', '英语', 88),
    6 d: Q- o: ]6 M/ D* J" S7 I! N
  11.         ('李春', '语文', 89),0 r2 q- |9 d. x  x
  12.         ('李春', '数学', 80),
    * ^8 `1 y4 G* H
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,+ c$ p  }& q, f
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    $ {2 P/ s$ I$ D- G8 U& p
  3. sum(if(Subject='数学',Fraction,0))as 数学,
    ! |( q% W/ Z. r. h2 q
  4. sum(if(Subject='英语',Fraction,0))as 英语,
    + E" j  K, t/ q
  5. round(AVG(Fraction),2) as 平均分,, x( ~0 _2 H, j
  6. SUM(Fraction) as 总分
    8 Q$ k! q# l( U, ]) y. F5 g0 p# E
  7. from t_score group by name     $ J6 l. N: _4 u! C5 ?
  8. union5 u: @* b7 G' I% K8 {- j7 e3 i: K
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(6 l9 v- F  {1 a/ m$ L/ k* R  Q; t3 ?
  10. select 'TOTAL' as name,
    : b0 b, N0 N$ }1 T  H
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    ! }  Y; K" P" W; ~: N4 |
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    ( K. o' ?! C7 S' E+ @% {5 F8 g1 Y
  13. sum(if(Subject='英语',Fraction,0))as 英语,
    0 `8 O( V8 x4 f# d& j" h
  14. SUM(Fraction) as 总分
    # D0 |' r- O$ Z$ i; B) ^  {4 r$ ~
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,
    9 }& m4 ^/ W: E# P4 U  M( ~4 ~
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,' g: s, [# }* R: h
  3. sum(case when Subject = '数学' then Fraction end) as Math,
    5 _  F( z/ g2 j. P  i
  4. sum(case when Subject = '英语' then Fraction end) as English,
    ) l) v6 [5 ]9 n& Y  R3 U
  5. sum(fraction)as score
    ' p2 U" Z! n! A4 a. y3 \
  6. from t_score group by name
    3 m7 F( l. b7 n% J
  7. UNION ALL" A) g6 H7 [, e5 h9 a
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(1 T! s& ?6 H' d# D/ G5 D0 D7 [7 q) m
  9. select 'TOTAL' as name,  F2 J' g( P6 g* Z0 B, p+ s
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,
    4 c0 J* ?: F- M* H4 s
  11. sum(case when Subject = '数学' then Fraction end) as Math,
    3 W2 P# \: Y: A( @/ o% n
  12. sum(case when Subject = '英语' then Fraction end) as English,
    + |6 _. d1 j  k! E$ T) w
  13. sum(fraction)as score& ~; h$ ^: `* o
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select ! B  F1 r6 C8 e+ n
  2.         ifnull(name,'TOll') name,
    + S- Z) _- _/ C- i, g" z
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,, i9 m, a- ^* X2 x4 O7 j
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,
    ! q" u  j" m; {- S/ \" s: [# q. F
  5.        sum(if(Subject='数学',Fraction,0))as 数学," ?1 B5 \2 T- D5 C7 T6 ~
  6.        sum(Fraction) 总分& p  i* g8 Z( {! R
  7.         from t_score group by name with rollup
复制代码
查询结果如下:
" S+ I. `+ U6 g
- |+ i6 y6 k( l9 D

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-11-13 15:03 , Processed in 0.034208 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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