召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2888|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
% G/ i" B, r1 E4 m, L要求查询结果如下 :, G) \9 D7 r) [; y# t2 ?; E2 u
! S. m: b! h! X) J* z" Z- E1 Y7 D* G
# {4 r" v0 h# V
创建数据库、表6 V/ p: m8 u: A; h! ~7 t* ^
  1. create database tests;+ g) ]5 ?, G& R8 o
  2. use tests;, W5 p% h- K3 ~
  3. create table t_score(' e& N% ?' ^1 y& M
  4. id int primary key auto_increment,  l7 T" N7 M) ?$ Z
  5. name varchar(20) not null,  #名字
    1 U! r8 X( u" \5 {
  6. Subject varchar(10) not null, #科目, E; S& J3 }. W2 A7 z- X
  7. Fraction double default 0  #分数
    9 ?- w- Q; t% V( T# }& t9 a
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES
    ; d* f9 O# E0 v7 q, a- r- Y
  2.          ('王海', '语文', 86),+ ^  y: L/ w  T6 i4 p, R! [
  3.         ('王海', '数学', 83),$ _+ j. ^" i9 F' [5 v1 M5 ]8 h1 ~7 T
  4.         ('王海', '英语', 93),
    6 F3 x9 E- C8 F1 ]+ ]" p& b+ h
  5.         ('陶俊', '语文', 88),( h" }0 {. N# Q
  6.         ('陶俊', '数学', 84),
    1 }3 b$ Z6 b: d. u$ j$ ?! @
  7.         ('陶俊', '英语', 94),, A( }$ y: W& z1 g1 Q* q
  8.         ('刘可', '语文', 80),
    ' `  H" }% j5 x& @- {
  9.         ('刘可', '数学', 86),
    $ }" y4 _; }# e1 u7 s  Y
  10.         ('刘可', '英语', 88),$ i9 {% O& z9 v# ^2 T
  11.         ('李春', '语文', 89),
    ! ]8 a4 C5 l. Q2 B# y! B) ^
  12.         ('李春', '数学', 80),9 P  r3 }1 N5 b) l
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,( k  t+ {0 h2 V
  2. sum(if(Subject='语文',Fraction,0)) as 语文,! c" l) c( p% c& @! L4 X
  3. sum(if(Subject='数学',Fraction,0))as 数学,
    9 P& y! T! @3 G/ F! @/ p
  4. sum(if(Subject='英语',Fraction,0))as 英语,
    4 k4 d/ H) p  g8 j. J9 o1 m
  5. round(AVG(Fraction),2) as 平均分,( P& l1 k+ z/ Q' r
  6. SUM(Fraction) as 总分- B* h# Q" |* Y! f
  7. from t_score group by name     
    / H" J. e  |6 d6 P# l1 Q8 I
  8. union
    7 P7 V3 D8 _5 R- l  X$ }5 S9 \
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(4 T5 |' G! w' i' b
  10. select 'TOTAL' as name,- `4 n  }! v+ P8 y9 N3 y% f
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    + R9 a9 P9 d# _2 m
  12. sum(if(Subject='数学',Fraction,0))as 数学, & b. y# E; ^" }8 h- {1 @+ w' v
  13. sum(if(Subject='英语',Fraction,0))as 英语,$ l: R6 O9 g5 \5 f+ G- e  U
  14. SUM(Fraction) as 总分: v6 _6 {9 L' b
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,* A+ V* |& m2 K( u1 Y' \/ s/ w
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,
    . b" t# H2 J, B" k
  3. sum(case when Subject = '数学' then Fraction end) as Math,4 H# e' D; |" J5 @; J
  4. sum(case when Subject = '英语' then Fraction end) as English,+ A; W0 `% u- }9 U- O( r. P# s
  5. sum(fraction)as score. R* }* z: \; {3 I3 A- v/ X* A+ r2 C% j
  6. from t_score group by name
    , F/ }5 H- l2 B$ [) P
  7. UNION ALL' P% Q* _( Q# B& Q1 l0 G5 N
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(5 x: x) m7 A6 C3 h
  9. select 'TOTAL' as name,9 k% V9 F9 n5 g/ w2 M
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,7 f7 |% D! X. F* |4 f
  11. sum(case when Subject = '数学' then Fraction end) as Math,3 h6 |* h/ `* `
  12. sum(case when Subject = '英语' then Fraction end) as English,
    1 |+ _, u& x" R* v/ G
  13. sum(fraction)as score  m5 X3 a  L$ F: a5 N- \+ e) O% G
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select 0 d: e6 B3 S5 m$ i, m: m
  2.         ifnull(name,'TOll') name,
    5 z, W9 e3 k+ |+ H: E3 Q) H
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,7 J7 f& D: V. U7 K7 j) n
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,
    # X5 `* W5 p, t) Z' x% f
  5.        sum(if(Subject='数学',Fraction,0))as 数学,
      M! E& W3 I& [/ E# t* T- j
  6.        sum(Fraction) 总分
    * u0 _7 v$ A$ P% k3 l" f1 |
  7.         from t_score group by name with rollup
复制代码
查询结果如下:

+ P$ L- O6 ~1 _0 e; I7 U- o( F; B7 m& R! Y( S/ w, l1 H

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-9-27 19:43 , Processed in 0.036606 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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