召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2689|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
/ B# {; N  [; K% q8 P要求查询结果如下 :+ F$ S- D* y2 o4 o" k  H: `- E+ ?
# O7 P& B/ ?; h& s, r

/ y, e& j1 g- B: }$ {创建数据库、表
! O* d* |" _$ M- h& M5 L$ W
  1. create database tests;0 q& ^6 F# E  l2 E7 o" M* T
  2. use tests;+ k5 ]8 r! J/ w% L8 ^
  3. create table t_score(
    9 Q4 v0 E' s+ u- D  x2 Y/ v
  4. id int primary key auto_increment,' _9 v3 a) e( U: @( a9 ]
  5. name varchar(20) not null,  #名字
    : }( [! Z: _7 e$ a) _7 W& L
  6. Subject varchar(10) not null, #科目8 J9 |1 M/ P. a# G. K  u
  7. Fraction double default 0  #分数
    1 e4 R" k( X: ^' G" U' Z4 F
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES
    % h( S* X5 ~$ Q9 _; M% \* r& ]
  2.          ('王海', '语文', 86),* q' s/ F6 }' z" ]7 V
  3.         ('王海', '数学', 83),
    ( w3 g& k2 [; T3 c3 l% l" r: T: i
  4.         ('王海', '英语', 93),  v  t& P* U  w! ]7 D* Z5 W
  5.         ('陶俊', '语文', 88),) ~, J- D4 [+ G: W1 Y
  6.         ('陶俊', '数学', 84),
    0 T7 x5 T1 Q4 Z
  7.         ('陶俊', '英语', 94),
    6 W; i( t7 _2 N4 P
  8.         ('刘可', '语文', 80),
    % {1 Y! {. v4 W5 |1 W: A7 F( ]
  9.         ('刘可', '数学', 86),! ]9 h: X5 N5 o4 t" s
  10.         ('刘可', '英语', 88),7 b) T3 p, l8 L1 G( D: S
  11.         ('李春', '语文', 89),
    ! I( u# M: M% x: f0 u* L) \
  12.         ('李春', '数学', 80),$ l3 Y9 P2 h. f- z: H
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,6 P8 W- ~7 P, N6 ]+ y: R5 P" ?
  2. sum(if(Subject='语文',Fraction,0)) as 语文,: z( t) P# H# D+ W6 k
  3. sum(if(Subject='数学',Fraction,0))as 数学,
    6 f# P$ O6 F+ I* U: h" |( i( i
  4. sum(if(Subject='英语',Fraction,0))as 英语,
    : o! b6 j, ^" o7 ^: D$ H) f
  5. round(AVG(Fraction),2) as 平均分,
    $ i9 @6 }) J* W9 `3 X2 |0 s' S
  6. SUM(Fraction) as 总分* e+ k) X- o7 F# W3 x
  7. from t_score group by name     5 N, }6 W- H( \. q% o0 {  ^& H- {+ E
  8. union+ f7 }$ y( E3 N8 o
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(
    0 {( h. K1 n5 A# M0 w
  10. select 'TOTAL' as name,+ Y5 }; i7 B; Z
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    4 U1 ]& z/ @" R/ r
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    4 j0 d( y2 X6 V, W- v, _0 B
  13. sum(if(Subject='英语',Fraction,0))as 英语,
    9 U% n  ?. ^6 R/ b+ |
  14. SUM(Fraction) as 总分
    - J  O. u# O( \, U( g- t
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,
    1 ?$ Q; J5 p, ]. y" y
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,
    - L' |. W: y  m+ {, T7 ?9 p, g
  3. sum(case when Subject = '数学' then Fraction end) as Math,
    ! h5 v8 E6 ?0 \; A: N
  4. sum(case when Subject = '英语' then Fraction end) as English,
    $ B- P4 c4 C( W$ ~; g, B% L
  5. sum(fraction)as score
    . K- @: s2 w- I8 c
  6. from t_score group by name
    # l: C: u9 o7 H" q$ }$ f6 r
  7. UNION ALL; y# X" C3 F) c- I( ^& H, j
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(% o3 S% F% {( n  \. A
  9. select 'TOTAL' as name,
    & U% @* Z! K8 Q9 P: t
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,
    5 f, }, U6 u4 i+ P; N  ?6 e
  11. sum(case when Subject = '数学' then Fraction end) as Math,
    # n2 c: w6 x5 I! t* J7 ?( D5 }2 Z7 ^
  12. sum(case when Subject = '英语' then Fraction end) as English,
      Q4 J+ [5 z  M
  13. sum(fraction)as score
    9 j  w  T9 e% U4 H
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select
    + z& @3 \$ `* f6 U
  2.         ifnull(name,'TOll') name,
    . U8 S- U& L2 ?& V
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,9 h  I3 _1 N" E, U& Y; S2 ?; w
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,
    ; d: s* f. ]" {% I
  5.        sum(if(Subject='数学',Fraction,0))as 数学,) m- T% \, T' M' |
  6.        sum(Fraction) 总分
    8 e- J8 t; G7 Z5 f. [" W) E
  7.         from t_score group by name with rollup
复制代码
查询结果如下:
3 ^$ ?: ~: E) [& G9 }* l4 P8 c8 t, d
: d; @- k5 I0 g) a

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-14 09:17 , Processed in 0.041955 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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