召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2775|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
. R8 ?% \/ A+ H! \6 n: y. C要求查询结果如下 :& Y  C% P& ?4 z. D; y
+ _% p8 s9 e+ j% p/ n0 V, U

4 j2 _' L/ E6 d! g; b5 o% X6 t创建数据库、表
/ f4 o1 o/ V4 I# S4 U$ T. V
  1. create database tests;3 }- ^6 n7 j7 V3 J' _- X: J
  2. use tests;) }3 }: A3 u- V2 R3 U" t8 {
  3. create table t_score(
    , F2 w% L8 E8 @: L/ I" {9 R9 A
  4. id int primary key auto_increment,; O9 Q2 F# Y' e
  5. name varchar(20) not null,  #名字
    4 |) n4 d' l9 u7 [8 v/ s$ u
  6. Subject varchar(10) not null, #科目! a. G% i. \& w4 ^7 O) ~/ F
  7. Fraction double default 0  #分数" A1 s2 s8 S' U- X
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES
    ( U3 x. n8 n! Q  p
  2.          ('王海', '语文', 86),
    # f% d0 ?. X/ m
  3.         ('王海', '数学', 83),
    , P( ?5 o5 W' ^. m1 K8 g" x% m) r
  4.         ('王海', '英语', 93),
    ; C/ o, T$ \! v7 w. P
  5.         ('陶俊', '语文', 88),( X# g8 ?  W% L" D8 S, d% V
  6.         ('陶俊', '数学', 84),
    - Y& W! M7 y0 p( Q" \  |3 F# D( s  Q7 _
  7.         ('陶俊', '英语', 94),
    " y) X# Y4 m- L& D. Q( V
  8.         ('刘可', '语文', 80),1 ^4 Z7 ^+ H! O* J% i1 @* A
  9.         ('刘可', '数学', 86),, ~; ]+ s! n$ x) O& U6 F
  10.         ('刘可', '英语', 88),
    5 i7 e# X/ }0 s
  11.         ('李春', '语文', 89),, ^/ N3 c! {: e5 F" X
  12.         ('李春', '数学', 80),
    " @+ w# ~  U) w3 r2 ^
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,8 D2 U3 `# y+ F; t2 O, l
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    # {2 E( p# ^- P, J
  3. sum(if(Subject='数学',Fraction,0))as 数学,
    9 f3 `& C* R7 @1 ?
  4. sum(if(Subject='英语',Fraction,0))as 英语,8 e; n2 x& }. A
  5. round(AVG(Fraction),2) as 平均分,
    7 Q' B0 |3 g2 |5 N1 ~
  6. SUM(Fraction) as 总分% A6 j" c/ S" A% b& L1 y2 F, C/ s
  7. from t_score group by name     
    + m4 }% l8 b, Z9 S2 g0 R
  8. union
    / a8 W0 ~, ?" a, d/ l1 _' }
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from() p# J9 F5 Z4 o+ s  u7 ]1 B
  10. select 'TOTAL' as name,: o0 O2 A8 t9 r5 q# V
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    ) g# f- Z+ Z4 i2 e+ X5 k- ]% u
  12. sum(if(Subject='数学',Fraction,0))as 数学, 4 u% j! y/ V+ M9 F) e
  13. sum(if(Subject='英语',Fraction,0))as 英语,
    $ e8 i0 m- x# }% e# o. b; U. }
  14. SUM(Fraction) as 总分
    ) A: l; F# h. y4 A
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,
    . Z$ ]* E& k) K; g2 S: A9 U/ \
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,
    ' R, X4 B! ]9 p6 B$ d5 k+ R  `  ]
  3. sum(case when Subject = '数学' then Fraction end) as Math,
    . f: ^; g# n% Z* Q% H. X4 z, }; ?2 b
  4. sum(case when Subject = '英语' then Fraction end) as English,
    * K  Y. x! _) T' |. }4 U# h" [
  5. sum(fraction)as score- q6 v, R: ]% {! A. ]2 `7 R
  6. from t_score group by name
    * f. N# T- U4 l, ~# T3 C2 ?0 a
  7. UNION ALL3 D3 M& z# ~) U, c- R! d; Q
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(& e! K- A5 l& L! I4 l! M& O8 S% h' `
  9. select 'TOTAL' as name,2 Z3 b. x1 |- f8 _2 ~
  10. sum(case when Subject = '语文' then Fraction end) as Chinese," `3 K/ O$ y* r; p6 t
  11. sum(case when Subject = '数学' then Fraction end) as Math,/ t3 l/ @/ t: n; H6 T$ N  ~. l  G+ ]" r+ @
  12. sum(case when Subject = '英语' then Fraction end) as English,
    , b: ^9 |2 N2 b# p9 p4 _% _* l5 {) J
  13. sum(fraction)as score
    " R$ D! \; P; d1 r+ ?) r! q" T+ e  x/ s
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select 2 V6 T# O1 U+ {& J
  2.         ifnull(name,'TOll') name,+ Q6 p8 |+ @6 M: Q. u" R0 ~
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,# |/ X" F7 G/ I1 [0 [
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,
    7 g3 @8 q# F5 C7 A8 b
  5.        sum(if(Subject='数学',Fraction,0))as 数学,
    % Z3 S2 J' N& O+ h0 s
  6.        sum(Fraction) 总分: |8 `5 h" D$ G6 w9 m* h( i3 b
  7.         from t_score group by name with rollup
复制代码
查询结果如下:
6 o; n. p5 k  y; p; d

/ L" X* v! }5 N# W9 b* a

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-8-14 04:15 , Processed in 0.033362 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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