召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2919|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:. I7 S: |9 o9 F! h$ O8 h
要求查询结果如下 :8 R5 e: b* B- u( ]3 I) D  m7 C
0 l1 E4 w2 P4 n7 z( a: [  Q
/ @' w* T6 P9 A; U1 Q# Z
创建数据库、表# ]1 c* w6 R3 O" j* c( e
  1. create database tests;+ J! P4 z; {/ i" ~) w( Q
  2. use tests;7 E  H. z- U; A
  3. create table t_score(3 x: m6 {1 @# Q5 d" F' n
  4. id int primary key auto_increment,8 H. V) A% `& S+ |# q
  5. name varchar(20) not null,  #名字( Z' Y2 h8 x3 a  l) {
  6. Subject varchar(10) not null, #科目0 z7 ^9 z2 Y1 j/ G" M
  7. Fraction double default 0  #分数
    6 [: Q# o7 p7 s
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES, G; |" A% k; J" V7 k
  2.          ('王海', '语文', 86),1 M5 Q0 x- V- s! j9 R
  3.         ('王海', '数学', 83),
    - b5 _0 M0 S6 p6 V3 |  E
  4.         ('王海', '英语', 93),
    2 o) [# ^8 N! A! I
  5.         ('陶俊', '语文', 88),6 i4 p5 c( Q/ P+ z) r# N
  6.         ('陶俊', '数学', 84),
    . a. D, \7 o" |+ y( v
  7.         ('陶俊', '英语', 94),. D5 Z* e0 n# k" k
  8.         ('刘可', '语文', 80),  _) y5 o$ i# K# o
  9.         ('刘可', '数学', 86),0 i& n7 o- ]" y" H7 B& `( Z
  10.         ('刘可', '英语', 88),
    - r+ j  H9 _! [# E3 G
  11.         ('李春', '语文', 89),5 {% T5 b9 [. }
  12.         ('李春', '数学', 80),
    & A5 I9 a* W. u& g1 M9 C1 P
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,
    % h  O* R+ `4 A- s
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    * f9 u6 k5 S% S4 t
  3. sum(if(Subject='数学',Fraction,0))as 数学, ; `& F# U5 o, W& D1 D  V( C$ y
  4. sum(if(Subject='英语',Fraction,0))as 英语,+ ?- E- g9 L9 Q; R! n. J. X- r% M
  5. round(AVG(Fraction),2) as 平均分,
    7 }) G8 Q9 L% b& `
  6. SUM(Fraction) as 总分! r) [  J' b! l, d* ]( E* |& k* I
  7. from t_score group by name     , x" [7 h& u5 \, ^7 |# |
  8. union
    ' E+ A/ v' U# i) g4 o
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(: D& K6 K' m4 p) X1 ^( g0 y9 D
  10. select 'TOTAL' as name,2 u0 T" z, g! ]$ u) O
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    " ~' O0 [3 Y4 F* X( |: n
  12. sum(if(Subject='数学',Fraction,0))as 数学, ; |2 y8 Y) i) [  |6 d* o- |' L
  13. sum(if(Subject='英语',Fraction,0))as 英语,
      \5 k  w; w* h3 i2 K% s# U
  14. SUM(Fraction) as 总分4 T% b2 N2 f) d& [6 _; J. _
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,
    . p5 b# k4 p: k$ J$ A5 h
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,9 N" t+ v  A5 @( J; [1 g2 [
  3. sum(case when Subject = '数学' then Fraction end) as Math,8 I0 h) R4 G, f, P
  4. sum(case when Subject = '英语' then Fraction end) as English,
    $ I& Q. T- U6 P4 y+ A
  5. sum(fraction)as score
    % q/ N4 ?" S( ~  Y  S; _  S
  6. from t_score group by name; T. b: {- x+ m" \8 ^  @- T
  7. UNION ALL
    : O" b4 n. l8 l7 _/ o2 r) [, ~2 j
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(, l/ @. B9 X) Z
  9. select 'TOTAL' as name,
    ; F8 `6 `  _8 d7 V8 j' O: I
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,
    ! ?7 [4 A9 C; u2 }
  11. sum(case when Subject = '数学' then Fraction end) as Math,; C1 Q4 q5 ]) }  q! s
  12. sum(case when Subject = '英语' then Fraction end) as English," g6 y& c" m4 S0 s5 }- l5 R
  13. sum(fraction)as score
    0 ]3 h( `' s  q8 k: r$ v' a( r
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select
    ( L# c2 f/ {6 h& s. S- ?" o
  2.         ifnull(name,'TOll') name,* A- C% _, d9 V" u+ y: [; j5 y
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,
    8 _( m) T9 S7 K% J3 `
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,
    ' M! u6 u1 `' k
  5.        sum(if(Subject='数学',Fraction,0))as 数学,( l) M1 h/ d3 C, O; v
  6.        sum(Fraction) 总分- u5 E) j$ W$ W
  7.         from t_score group by name with rollup
复制代码
查询结果如下:
; o6 h! [* a8 d( ^9 N# z8 K

  L* O' }1 {0 d, A4 t: v& p: k

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-10-19 02:01 , Processed in 0.035699 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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