召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2391|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
* g: v# u3 g6 a* B要求查询结果如下 :9 C7 }! g. D5 t% \7 f, Y

. U, p; i* f# d  Y9 d+ J5 ]3 y) H7 _6 ?
创建数据库、表
; A, P. p, M/ h3 Y% X
  1. create database tests;8 E+ W. @" r5 H  ?6 ]% n/ ?2 a6 ?
  2. use tests;  Q8 ~& @+ J7 c* b: {1 y" E
  3. create table t_score(
    1 \+ R, p; a0 u) n
  4. id int primary key auto_increment,8 G7 L- V2 Q: P9 Q/ q7 |8 G
  5. name varchar(20) not null,  #名字9 t  s- Y1 m, }3 _
  6. Subject varchar(10) not null, #科目
    5 ?: q- n/ M/ E; n' d
  7. Fraction double default 0  #分数& l, \; i6 Y" K' N7 r2 \
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES2 N( H& e5 ~9 X  D* @8 [, A7 [3 T8 k
  2.          ('王海', '语文', 86),
    ' Z# A' l) u8 D6 j/ d0 O1 X8 O9 D+ c
  3.         ('王海', '数学', 83),# D- a( u  ]" F5 G6 d. _
  4.         ('王海', '英语', 93),* N( n2 v  ~7 t
  5.         ('陶俊', '语文', 88),1 ~& B" U$ l2 J: m  A! W7 Q
  6.         ('陶俊', '数学', 84),& f7 j& s- _9 j- [- o# W' n$ _# Y
  7.         ('陶俊', '英语', 94),1 [9 q, y- i  n# Y+ g7 w" z
  8.         ('刘可', '语文', 80),$ j# ^1 n* @6 r: N( T2 p& w6 V
  9.         ('刘可', '数学', 86),
    5 k. p, o# A! P' \
  10.         ('刘可', '英语', 88),% X& ]' N6 K) Y, @- n. I
  11.         ('李春', '语文', 89),, {; `2 k7 S7 P  C* Z
  12.         ('李春', '数学', 80),
    - v8 D! ?0 J: `
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,( |% X! U$ w! q) b' v; j
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    ' ?7 m" e" A$ V- h+ Y
  3. sum(if(Subject='数学',Fraction,0))as 数学, 9 g% w, h% V7 X4 a
  4. sum(if(Subject='英语',Fraction,0))as 英语,
    % F5 ]/ I1 j$ \# N
  5. round(AVG(Fraction),2) as 平均分,. Y! q6 l$ D/ O$ R; ^# }7 b' q! L
  6. SUM(Fraction) as 总分
    7 V4 K" q# O. a# g. j
  7. from t_score group by name     3 }  \6 S  C+ H" {2 P3 l- x
  8. union
    & @& O& E' V4 T; T
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(1 {  ?( m! g& p7 H
  10. select 'TOTAL' as name,7 n) s; D* d3 r7 p, E% c' Y0 V
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    - Y5 C7 H% a2 _, p$ X
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    " q  w: x$ s3 T2 b! D9 e
  13. sum(if(Subject='英语',Fraction,0))as 英语,
    0 ~! Z0 z% y: G# J1 ^
  14. SUM(Fraction) as 总分. O. J, @# W; W, _. D& o
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,
    ; ]  H$ _! j3 x. ?: q
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,
    7 G8 U6 |" y/ H
  3. sum(case when Subject = '数学' then Fraction end) as Math,
    , g) F" z8 d. N& Q' B
  4. sum(case when Subject = '英语' then Fraction end) as English,: x2 z# ~: h+ g
  5. sum(fraction)as score' Z2 f( p4 V* n" n+ e& O
  6. from t_score group by name/ k* c. T4 Z! J( ?- Y! A2 e
  7. UNION ALL3 }! i- `6 [/ n& e* o3 h
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from() o/ b# H& F" L3 ?* l( f/ X; p
  9. select 'TOTAL' as name,0 u. r' e- E9 ^6 ~- b. n0 `  y
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,
    8 w# u; b8 a% m6 g3 T
  11. sum(case when Subject = '数学' then Fraction end) as Math,: O9 R- J3 g& ?" t3 f) w: I
  12. sum(case when Subject = '英语' then Fraction end) as English,( s/ V, o% x6 ], {' l$ L0 y. Y6 g
  13. sum(fraction)as score5 d2 K4 O) S5 }
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select 2 F! z- D# _/ R3 z2 `* T% }
  2.         ifnull(name,'TOll') name,
    0 V% L) Q' g& ]3 V
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,
    ( I+ w% [2 ~$ N: l. G
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,! k' n0 Q2 C' g9 L/ o
  5.        sum(if(Subject='数学',Fraction,0))as 数学,( G: ~, w, \8 Y* O! _+ H
  6.        sum(Fraction) 总分5 Y6 a3 }3 \. P' o+ Y
  7.         from t_score group by name with rollup
复制代码
查询结果如下:
4 T5 W3 y& t7 I1 V, a1 U$ l

7 q; _, l4 [; f+ ~' v# H  q  `

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-5 01:38 , Processed in 0.035279 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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