召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2416|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:. y4 Z$ y5 c+ `
要求查询结果如下 :; _+ L4 n" T$ J9 c) _6 J  I

6 L7 ?1 J9 U  J" `& L0 y9 D% ], u2 q
创建数据库、表
) p6 S+ ?+ z! |) {1 w1 F5 V* y3 v
  1. create database tests;! B9 O% R7 f: d
  2. use tests;' x8 ?7 T$ n# K
  3. create table t_score(
    8 g) ^# a8 M6 o' ]  R6 _1 {9 ~4 F
  4. id int primary key auto_increment,
    8 C1 ^$ h) h/ n# i
  5. name varchar(20) not null,  #名字( {  }( q. _5 t. S
  6. Subject varchar(10) not null, #科目
    ; @0 {' V9 r- ~6 N- @9 z. r
  7. Fraction double default 0  #分数
    & r2 l4 u) x* u8 W' r. B% s
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES
    # \) A2 w3 D) x6 @$ z& `, E. ?. |+ Y/ Q
  2.          ('王海', '语文', 86),
    7 D/ v( b5 r2 }" O8 \
  3.         ('王海', '数学', 83),
    , ^/ ~3 j# j. v6 c3 J0 ?4 `$ n! s
  4.         ('王海', '英语', 93),. b7 ~# Y& ~* d" W  \
  5.         ('陶俊', '语文', 88),% }6 B/ n9 c( P! G. p( H8 S  C3 x
  6.         ('陶俊', '数学', 84),
    9 ?3 T4 Q! n( |2 k) a
  7.         ('陶俊', '英语', 94),0 [! i7 N/ }' _1 v+ r. C, V; F
  8.         ('刘可', '语文', 80),
    $ P7 i" j2 c) O5 i
  9.         ('刘可', '数学', 86),  J% p! e+ S7 C- d) w$ M; M$ Q
  10.         ('刘可', '英语', 88),
    ! t, f4 C. p" W6 i: a
  11.         ('李春', '语文', 89),8 J8 {) D- d0 D2 A8 t/ b$ \; |& b
  12.         ('李春', '数学', 80),' ?' a! J2 q5 Y( d
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,& z6 l% \# ?# Q0 L+ s2 X) B$ q
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    ! a5 l4 h4 D; B$ O
  3. sum(if(Subject='数学',Fraction,0))as 数学,
    2 V4 b: y4 H9 ^5 m- _, _* i4 e3 A
  4. sum(if(Subject='英语',Fraction,0))as 英语,
    ( c/ }6 I5 A# X5 B6 v
  5. round(AVG(Fraction),2) as 平均分,3 k% S8 @" |* K! }! l/ m$ Y: \2 v& q/ r
  6. SUM(Fraction) as 总分; X: t. E( h! @, X# N
  7. from t_score group by name     8 ~2 G  n2 M0 f
  8. union
    3 B0 C2 b, b" }4 B
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(
    % s: s7 U- M' U6 S0 Y6 a- P0 Z
  10. select 'TOTAL' as name,
    - ?% W8 R$ D2 D9 i! {1 b$ w
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    " q" G: j4 f9 G1 e
  12. sum(if(Subject='数学',Fraction,0))as 数学, 2 E$ J& f; u& n5 I3 ~0 x
  13. sum(if(Subject='英语',Fraction,0))as 英语,
    / M& M" r4 D) w* o
  14. SUM(Fraction) as 总分. e1 z0 o& {# R4 R- d/ D
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,
    / ]& `( W7 t" K) y' F; q& E
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,  R' g4 h& m  j4 u2 I
  3. sum(case when Subject = '数学' then Fraction end) as Math,7 w0 j( z7 n5 ?$ p3 |' w" a& J, C
  4. sum(case when Subject = '英语' then Fraction end) as English,9 ]  d* i9 x' F9 F6 M7 D* V
  5. sum(fraction)as score" e0 o: e* q, M* ]
  6. from t_score group by name
    4 B: Y" }' j) O5 d
  7. UNION ALL( B) a6 k9 J: Y2 i( u6 G( l
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(: Z: }2 R0 S+ w; E
  9. select 'TOTAL' as name,$ f$ j) u) H- {( g
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,! \1 N, \) V; W/ y# `
  11. sum(case when Subject = '数学' then Fraction end) as Math,
    / ?6 p! U( f& z6 z5 w
  12. sum(case when Subject = '英语' then Fraction end) as English,/ K4 l; L' c( ~5 O8 A/ X9 F
  13. sum(fraction)as score! t3 }9 A9 ^5 F# K, R! [
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select
    % s  d" k" _. z1 \; R8 G+ a
  2.         ifnull(name,'TOll') name,
    " Z+ ?+ _/ D+ O' u. v, a
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,# K) w+ S/ u0 Z0 U7 h
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,
    " l5 ?7 u4 o, R6 ^, ^% c$ ?
  5.        sum(if(Subject='数学',Fraction,0))as 数学,
    ( U% ]- u! f8 l, D0 W0 d
  6.        sum(Fraction) 总分
    7 B- P, b5 i6 i
  7.         from t_score group by name with rollup
复制代码
查询结果如下:

1 n) h; k8 O* t8 F# w8 G9 U, U8 M" k3 c1 r; u

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-28 19:38 , Processed in 0.038766 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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