召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2993|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:8 I/ ~+ c: h2 E- x5 Z
要求查询结果如下 :* V: e) _, [+ U$ K
6 g$ k: }1 }4 D7 Y% U. K0 _2 F

0 {  r6 f( W: X$ c创建数据库、表- c: s6 h. a" V
  1. create database tests;
    # M' y2 O1 T' X& a3 f; x9 [% w
  2. use tests;8 r& P2 e, G* a" e' @
  3. create table t_score(7 i6 S! Y: V7 {- [
  4. id int primary key auto_increment,
    * q& x' K1 ^: @; n# Z' @& t3 C
  5. name varchar(20) not null,  #名字
    0 p5 C) O# g  Q$ X8 |: ^
  6. Subject varchar(10) not null, #科目% D; B1 f& d# f& A+ p
  7. Fraction double default 0  #分数
    7 R) R0 q0 a8 ]% ?# N; S
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES
    ; g  U: P/ _  |
  2.          ('王海', '语文', 86),, N1 B" A* b& J! _, X
  3.         ('王海', '数学', 83),
    4 x) ?3 t0 s* j& w
  4.         ('王海', '英语', 93),
    * Q1 X4 v& Q% u2 g7 E7 o
  5.         ('陶俊', '语文', 88),
    0 E1 u/ b1 W" Z; G( w
  6.         ('陶俊', '数学', 84),
    * p! d3 `3 ~! S) t1 l$ n
  7.         ('陶俊', '英语', 94),
    : D, F9 g9 [! J# U7 a: o% J
  8.         ('刘可', '语文', 80),
    * `! O. K! \3 K$ G; ~! A4 e" J! O
  9.         ('刘可', '数学', 86),
    1 @1 k7 I( p$ T, A; q' I; M8 P
  10.         ('刘可', '英语', 88),9 s- [6 I) b) W' V) K7 O2 C
  11.         ('李春', '语文', 89),2 y- ~+ x- ]0 w& D+ n5 @
  12.         ('李春', '数学', 80),
    " a. C$ ^. B  T$ L4 ]% p, y9 f% S
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,* J# K- v+ {" Y) ]. N
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    + Y5 n/ R4 ]. e7 Q6 T, B6 E
  3. sum(if(Subject='数学',Fraction,0))as 数学,
    % Z& E' _  E% L& O
  4. sum(if(Subject='英语',Fraction,0))as 英语,
    3 T6 Q1 K. P; N9 O
  5. round(AVG(Fraction),2) as 平均分,
    2 Q# R- T! l2 }; ~% K9 Y& c# y
  6. SUM(Fraction) as 总分
    8 `& {& }/ I( R  [- j0 Q: D6 V
  7. from t_score group by name     " B# D/ x" Y5 I, {- G& ^+ K
  8. union
    % H, y) `/ _, S
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(8 I; b# N0 B3 |) D, P
  10. select 'TOTAL' as name,
    : q" k' Y8 m+ r9 \5 }2 a5 P
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    " P, }2 l0 R2 m5 G  ^
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    4 N4 T$ r! t& B; D
  13. sum(if(Subject='英语',Fraction,0))as 英语,5 ~$ ^  D5 x. X$ r( H* B
  14. SUM(Fraction) as 总分# B" j# Q, l% ?+ J  y$ H5 E$ x- Z
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,
    0 p5 D: D9 t" P4 G! g- |
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,
    - V. w# h; n5 Y: _
  3. sum(case when Subject = '数学' then Fraction end) as Math,# V6 {! _6 q0 d% k
  4. sum(case when Subject = '英语' then Fraction end) as English,
    5 z  k1 `3 t$ k; @, ~0 ?) p
  5. sum(fraction)as score
    : u% \: [& R; B* v5 }
  6. from t_score group by name
    ! |0 j3 u& F  P# K1 t7 \* B5 A
  7. UNION ALL* c: c. w7 {" P! x; E
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(: c0 ?2 T, F( w& f( d% Y
  9. select 'TOTAL' as name,
    ! y( A1 M! d4 w7 ~
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,+ K+ E" h) K5 |0 b2 e! M; [
  11. sum(case when Subject = '数学' then Fraction end) as Math,3 N$ v8 B; P6 A8 U2 ^+ m$ i
  12. sum(case when Subject = '英语' then Fraction end) as English,
    ) U& ]( S% `! T' m: P
  13. sum(fraction)as score# S& ]1 |/ m9 K  T3 V2 s4 R' Q, T
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select , A6 J1 I$ [% \" e2 z% j; G1 [
  2.         ifnull(name,'TOll') name,9 u. O: x: r) n' _1 X
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,$ n: h! A) B& G1 v
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,! @. D) p  m3 [! \
  5.        sum(if(Subject='数学',Fraction,0))as 数学,
    3 e: |6 ~6 e, M* T0 b
  6.        sum(Fraction) 总分' q- D0 ]( p1 s4 I* W4 L
  7.         from t_score group by name with rollup
复制代码
查询结果如下:

: J- z( N/ N' B# P- d, D9 g/ ]: y- I" |4 @; m6 |

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-11-8 13:47 , Processed in 0.070907 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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