召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 553|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
9 E) a7 ]7 ?$ R2 b  M要求查询结果如下 :* U; s) Q& b6 [+ D3 c) @6 f3 O. q
3 ?' v/ R6 L6 ]! M1 W# j3 Q

) G: @3 {& ]. ]创建数据库、表
0 x! G6 B: U! M1 P6 p3 k& k
  1. create database tests;
    7 y% S  m. O' Q  b7 Y6 ~' m
  2. use tests;
    6 p$ k, b$ p0 {! N, ^& ^- ~: N: a1 k7 F
  3. create table t_score(
      @! F8 {/ J+ q" w3 E
  4. id int primary key auto_increment,
    8 X* S6 S2 C8 ]$ B  g  M  i' |
  5. name varchar(20) not null,  #名字
    & X! }4 p# `" H0 [
  6. Subject varchar(10) not null, #科目
      Z. \6 ?# p1 ^, b1 o
  7. Fraction double default 0  #分数; k& F. z$ S& W( q+ {: T. _8 U2 H
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES
    8 W2 D  j8 t6 R0 p" b5 }1 ]
  2.          ('王海', '语文', 86),
    3 m3 @# U8 U4 j# r3 S- a
  3.         ('王海', '数学', 83),
    ; j% u5 h! H8 L2 K, p; A
  4.         ('王海', '英语', 93),4 d0 r4 z4 y! u; y" D; }
  5.         ('陶俊', '语文', 88),+ M$ X3 n# w  X4 q5 E5 R1 h
  6.         ('陶俊', '数学', 84),* ~6 l+ k6 t! V1 U' L! P
  7.         ('陶俊', '英语', 94),+ m; d0 H+ Y- _% o3 @1 n8 J
  8.         ('刘可', '语文', 80),
    / B& [+ }: C' N: j- @! c$ l9 S2 Z7 h& V
  9.         ('刘可', '数学', 86),& J, z% ^3 X5 Q% P
  10.         ('刘可', '英语', 88),3 z2 c; m% k* D: f; K6 @
  11.         ('李春', '语文', 89),6 f: t0 b/ ~; w$ N6 S% S
  12.         ('李春', '数学', 80),9 D+ \. j: r- C: @; a
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,+ z+ l( }' d  {8 a) E2 f; _
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    4 V1 Q9 ~6 L( N- S$ L( q0 |
  3. sum(if(Subject='数学',Fraction,0))as 数学, + B# X5 u$ I5 Z: ~7 N- |
  4. sum(if(Subject='英语',Fraction,0))as 英语,. i7 h$ i, a0 I
  5. round(AVG(Fraction),2) as 平均分,/ y+ w" [( p3 s7 t0 b
  6. SUM(Fraction) as 总分
    $ H6 Y: R' s3 b* n2 H
  7. from t_score group by name     / D( ~8 B5 K1 f# s" {( m
  8. union4 Y8 {/ C8 s! ^8 K9 g1 y
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(
    % T  h4 a" [% ], Q# ?& D
  10. select 'TOTAL' as name,
    8 @! V) G& L/ L8 ^$ B
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    7 p# {5 p4 l, y2 S4 U
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    9 U- p( o8 J# b# S9 Q
  13. sum(if(Subject='英语',Fraction,0))as 英语,
    % o) q% ]6 t* p0 e; Y. ]" ]1 {3 {
  14. SUM(Fraction) as 总分# F* j' v7 Z$ f9 m% X- b
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,
    ' u7 m. n# v* y3 ]
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,% l2 q( D! s5 l. `6 ^% c) p
  3. sum(case when Subject = '数学' then Fraction end) as Math,
    ) m8 R" y7 U, s( ?, v
  4. sum(case when Subject = '英语' then Fraction end) as English,) u, A  g! x  S% Y- _7 Z2 [* a
  5. sum(fraction)as score7 o7 E# p/ V( B; L: F+ b) W) ?% k
  6. from t_score group by name& i) r& G" v0 T3 D" u( ?
  7. UNION ALL
    ' ]% \; s, W) Y$ u; P" C
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(4 h! X1 T" X4 v3 O
  9. select 'TOTAL' as name,, z7 j8 C  |, q2 ]  g
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,
    " l$ a* {/ w2 Z* {! I' h8 C
  11. sum(case when Subject = '数学' then Fraction end) as Math,
    # h4 m4 N/ Z) _" U+ E  P- l, v" n
  12. sum(case when Subject = '英语' then Fraction end) as English,2 ~# G+ ^! G0 t% r* I" T+ {
  13. sum(fraction)as score2 `2 \2 c6 x8 g) o1 `' p" a
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select
    . P, U/ y3 ]' X* x
  2.         ifnull(name,'TOll') name,1 M7 h' `" J# Y/ a# v4 u0 [
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,
    ' |; \( [' [1 u/ y) L0 {! A3 L3 ~+ @( a
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,: c; v2 w7 ^& `) [
  5.        sum(if(Subject='数学',Fraction,0))as 数学,
    ( P! b0 N; @$ o7 B
  6.        sum(Fraction) 总分) T. J- z) M2 B
  7.         from t_score group by name with rollup
复制代码
查询结果如下:

1 ?7 r( C$ M: r5 t/ R9 @
0 S* u3 n- B0 {! D& c/ H, x7 W

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-2-22 16:58 , Processed in 0.031532 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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