召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2446|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:2 ]; ]/ ^4 d# J: P# A
要求查询结果如下 :
0 R3 P: ^4 B+ J5 O# d+ x
: u* `* ~( t/ |5 S7 _3 d* C4 D$ p$ i% _, m! M" P; U2 T# O
创建数据库、表
; F5 V8 C( e& F
  1. create database tests;
    ; T- Y# g' _: V$ W' B: x
  2. use tests;
    4 m; |" Q% o4 o- @- g8 I) |
  3. create table t_score() K# f- f5 c" P, e
  4. id int primary key auto_increment,0 L( x2 |1 |$ U9 E" N) y: S
  5. name varchar(20) not null,  #名字' f/ v6 ~7 K1 Y0 G3 v; y
  6. Subject varchar(10) not null, #科目. D- g+ T; F6 P' s9 j
  7. Fraction double default 0  #分数
    9 ^' |7 \- j! B( ?4 ?7 |- M% b" }5 {
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES0 V; ~- w7 Q, Y$ ]) |! \7 y6 n% F. u
  2.          ('王海', '语文', 86),
    * s* h( N& x- m( U: n4 ^
  3.         ('王海', '数学', 83),) @( ~2 |0 D$ w) p7 U' b& c
  4.         ('王海', '英语', 93),3 v7 ~3 I5 A) {8 ]3 i# e6 Z$ c
  5.         ('陶俊', '语文', 88),
    / W: C. \& n/ k6 P
  6.         ('陶俊', '数学', 84),7 {  y; [4 C, ~8 v( i; u; E
  7.         ('陶俊', '英语', 94)," [, H* y$ {: V+ U
  8.         ('刘可', '语文', 80),7 a( X7 m9 }0 @
  9.         ('刘可', '数学', 86),% D7 j6 O! G( i; ~* ]
  10.         ('刘可', '英语', 88),1 h2 l2 ]& t# y1 T" y% v4 c  `
  11.         ('李春', '语文', 89),' E, M! V/ q( D# y: e  w2 y) c- B; J
  12.         ('李春', '数学', 80),/ V$ W9 A0 |* h- o2 ]9 `/ ]
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,
    & ~& V8 _( w. S. x5 A
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    $ B5 `, j: w  Z* W' c
  3. sum(if(Subject='数学',Fraction,0))as 数学,
    ) U8 V3 ~) h" ~( t6 S+ f1 w) g
  4. sum(if(Subject='英语',Fraction,0))as 英语,$ ]% m$ Z& A5 s% p0 i
  5. round(AVG(Fraction),2) as 平均分,: A  P4 @* a8 u8 I" [9 b
  6. SUM(Fraction) as 总分
    5 z  B- X. g' X
  7. from t_score group by name     ) S' f$ v! ~  y: Q
  8. union
    / r6 A1 D  V8 G( D7 i
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(. F) Z# G0 a- t" \
  10. select 'TOTAL' as name,
    6 G5 ^2 |+ ?- I+ C; a  B% z
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    1 y$ A. u2 J; k8 ^% |
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    ! K7 m3 B9 F0 }. }5 c+ @" s1 k) X
  13. sum(if(Subject='英语',Fraction,0))as 英语,
    , @9 s3 L3 r. P+ E: L1 S5 C& P
  14. SUM(Fraction) as 总分
    . d% u1 X. `: Y
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,
    0 X" F1 Q$ i6 s3 N7 v' ^
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,) A2 y  I7 k/ a. b9 L
  3. sum(case when Subject = '数学' then Fraction end) as Math,9 Q. E/ y! K# k3 v- b6 t
  4. sum(case when Subject = '英语' then Fraction end) as English," Y+ `* Q/ ?6 m
  5. sum(fraction)as score
    & {4 j) Q% g0 ]+ J9 e4 M4 x5 c( G
  6. from t_score group by name
    2 ^1 S6 K3 B  d
  7. UNION ALL+ V! q, x( d+ X6 I' H1 ]
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(0 u) r, G% q- Y
  9. select 'TOTAL' as name,
    5 u0 ^+ a: |  w' ]* t; D; S
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,1 C$ N/ q8 X$ Y# D7 ?
  11. sum(case when Subject = '数学' then Fraction end) as Math,6 x6 e5 H! [* r5 E0 v$ T
  12. sum(case when Subject = '英语' then Fraction end) as English,2 u1 U- f" C' I+ a* |# I4 P+ `
  13. sum(fraction)as score% w  G8 I* j) e) `- }$ o* n
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select
    ' b; y4 D: w. R" F
  2.         ifnull(name,'TOll') name,
    4 m% }1 M% ~0 a) Y4 w
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,
    2 L0 f% C1 w( z0 {/ ?
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,5 C' z0 c) H; _' O0 f; y0 s
  5.        sum(if(Subject='数学',Fraction,0))as 数学,
    ; e; _* ?! E2 u/ g  n- j5 \
  6.        sum(Fraction) 总分
    " o6 ]- f% g5 }' F# ~
  7.         from t_score group by name with rollup
复制代码
查询结果如下:

: c) b- d2 @( k# w2 S1 |' M2 S  s" C4 T

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-1-22 02:51 , Processed in 0.046302 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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