请选择 进入手机版 | 继续访问电脑版

召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2915|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:8 o5 f: B$ t  _8 _- s# R
要求查询结果如下 :
1 e' i5 u4 \, f% a; w9 Z
: ]7 c* J5 k* z
" M% G7 R" F! s/ y, a6 K/ [6 W! y创建数据库、表+ W  p9 ^: t8 r# B. M5 K
  1. create database tests;
    $ u& o3 S% c: i2 z: y* \+ Y% j
  2. use tests;: Q& Y4 @- O. c+ e# T
  3. create table t_score(
    4 P- V( @7 b- b+ O
  4. id int primary key auto_increment,) s; [4 h0 C4 Q- C
  5. name varchar(20) not null,  #名字# Y' a; i7 G: G# S
  6. Subject varchar(10) not null, #科目
    ( ?* l+ Q, r; U/ x" V* O. t
  7. Fraction double default 0  #分数
    3 y4 [/ K9 y0 Y' A
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES
    0 H" S* G, c+ o5 k3 V
  2.          ('王海', '语文', 86),9 _' V, ?$ s7 D7 @5 _' q
  3.         ('王海', '数学', 83),
    4 n' K5 N0 ?" A# c
  4.         ('王海', '英语', 93),  D" \# W! P, G& R# w/ s1 l) G
  5.         ('陶俊', '语文', 88),
    : j5 h( W8 X% g; G
  6.         ('陶俊', '数学', 84),
    . o2 y3 D$ l2 v0 ?. Y0 s" g! Z
  7.         ('陶俊', '英语', 94),
    ( J* M, t- x( e0 Z) _
  8.         ('刘可', '语文', 80),
    # N0 v/ F4 R8 B5 S% H  F/ p
  9.         ('刘可', '数学', 86),) X0 i- |+ ]( v  {
  10.         ('刘可', '英语', 88),
    - L! C$ I% T  b" A9 r$ ~* ]9 k. L
  11.         ('李春', '语文', 89),
    $ G: ^' @9 R, D% B* Z: Q. i% e
  12.         ('李春', '数学', 80),
    5 @2 T: p) S) P2 q0 W8 u. n  s
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,
    $ c+ j2 I7 b5 F2 @  F
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    4 m9 W7 @+ C& U: @% S
  3. sum(if(Subject='数学',Fraction,0))as 数学,
      z( k. ]: }  y) s/ q$ |( A4 u5 T
  4. sum(if(Subject='英语',Fraction,0))as 英语,
    8 t! |1 l3 N: }6 r
  5. round(AVG(Fraction),2) as 平均分,5 U& t. G- u! S' D9 W
  6. SUM(Fraction) as 总分  k0 p: Q& K  ?+ B
  7. from t_score group by name     
    $ P  N$ G! Y1 O* f" E1 L9 k9 J& m; z
  8. union' b( u  s) s, k3 Y0 E8 I8 U, H8 `
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(
    - B5 t. l5 }* d' @
  10. select 'TOTAL' as name,- g4 ]2 [5 T# i/ G  T) }
  11. sum(if(Subject='语文',Fraction,0)) as 语文,8 E! _9 e, p3 d5 |# V
  12. sum(if(Subject='数学',Fraction,0))as 数学, , W* {4 L* E( B  P6 Q9 r' ?+ H5 g
  13. sum(if(Subject='英语',Fraction,0))as 英语,
    6 b2 N( C6 P& N/ T) m- x& ?
  14. SUM(Fraction) as 总分
    5 c2 w0 B/ \& e: {/ Z$ Y5 K0 @
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,
    0 X6 `. Z2 V! t5 D/ G2 a9 ~5 t
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,* b& J% h$ }. C0 X3 @
  3. sum(case when Subject = '数学' then Fraction end) as Math,
    ( O0 k& i, L4 ]- _2 C
  4. sum(case when Subject = '英语' then Fraction end) as English,
    5 a$ Z, ~" }% s( ]+ O% G- f* N# D& h4 y
  5. sum(fraction)as score/ o# `: v, g; ]- x2 J
  6. from t_score group by name& i  B) B, D# b0 z- G6 j1 j# w0 b  A+ d
  7. UNION ALL
    / D" E$ j1 y7 n$ w
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
    : P7 _" L3 o' p' W+ F7 `
  9. select 'TOTAL' as name,
    8 E6 e4 r# C6 R2 A( O
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,
    : Y3 e, Y: Z. E+ l
  11. sum(case when Subject = '数学' then Fraction end) as Math,9 \# j1 I; v' e2 I  s8 }8 M1 ~, Q
  12. sum(case when Subject = '英语' then Fraction end) as English,3 n# z. g$ b! r: K- r% J, A
  13. sum(fraction)as score: w. C7 e- h4 s
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select
    % \/ ]2 d% o/ c. ?% W! _% K; B
  2.         ifnull(name,'TOll') name,; m: W2 U* X1 m8 j  `; M( t9 n8 R
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,$ \7 [4 e  `7 U- X
  4.        sum(if(Subject='英语',Fraction,0)) as 英语," b8 z5 r; z( S& n+ |, @
  5.        sum(if(Subject='数学',Fraction,0))as 数学,
    & R+ x2 p: ^7 d$ l
  6.        sum(Fraction) 总分1 v& D# W' U0 t' {% G
  7.         from t_score group by name with rollup
复制代码
查询结果如下:

/ |' ?6 x+ r: M: B3 {' C- |! M! ]' \; D' U5 o: y( C. Z

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-10-15 09:18 , Processed in 0.043483 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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