召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2599|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
+ K, P: h9 M: ]0 F1 x: A% q要求查询结果如下 :
2 _! I9 S: ?# v* m: z7 ~: C' o- l
6 t% f( _1 N0 e# s4 J
8 e# V" G# z) o. S创建数据库、表
4 h8 |* n* {8 U7 D2 D0 f1 N
  1. create database tests;5 d7 K. o( [& X+ c' Y5 a
  2. use tests;; T, i: Z/ ~2 D( k2 ]
  3. create table t_score(; \% W* e/ \( n
  4. id int primary key auto_increment,
    % _" N. H; N/ M' Y3 R0 O5 O2 y
  5. name varchar(20) not null,  #名字) q- p8 ?7 I- d/ ?
  6. Subject varchar(10) not null, #科目
    4 q; Y* O* y" L/ K; K* k
  7. Fraction double default 0  #分数& V0 D/ t+ i) B2 ^* g6 a$ B! G3 Y
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES
    ! V# d, M/ n4 T+ }0 W# m& x
  2.          ('王海', '语文', 86),
    - z( ~) X( w+ ~: ~' j2 N6 K( e
  3.         ('王海', '数学', 83),% D/ B+ k, \* }+ e0 q3 @0 J) {3 J
  4.         ('王海', '英语', 93),
    + @7 T2 h' Y+ U' w" \9 u- f
  5.         ('陶俊', '语文', 88),
    5 z6 g. C0 R8 Y. g% D3 h
  6.         ('陶俊', '数学', 84),$ R" ?! i( v# V1 d& I0 f
  7.         ('陶俊', '英语', 94),
    # E3 `8 o2 ]  z. t
  8.         ('刘可', '语文', 80),
    1 H5 d0 B, I( y4 j3 i
  9.         ('刘可', '数学', 86),
    4 Y4 p* t8 }; z% M
  10.         ('刘可', '英语', 88),' W; F# h4 p0 Y4 t% [7 a
  11.         ('李春', '语文', 89),
    5 H0 e, r" \! k: y* m9 ~
  12.         ('李春', '数学', 80),
      A  z" g( [* q% x0 _: n2 N: w
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,
    # t& ~2 M4 P/ Z# s' t8 |! j
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    8 W) C' P, I9 k9 c
  3. sum(if(Subject='数学',Fraction,0))as 数学, # r: b1 Z. T7 [3 u. H% @$ |
  4. sum(if(Subject='英语',Fraction,0))as 英语,6 x% M- l- |% [. q- b  w
  5. round(AVG(Fraction),2) as 平均分,
    & r) `5 H) F  J) ~. M
  6. SUM(Fraction) as 总分
    . v. {; V1 V& P" @: @' w6 O
  7. from t_score group by name     
    7 c/ Z; M, I0 D' X: t) N( G# C
  8. union
    ' y7 }2 E5 C3 X
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(* z$ Q8 o9 a  c
  10. select 'TOTAL' as name,% N' Q6 |# D. \* _$ m, y+ v
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    " G5 O* `6 N% {" D
  12. sum(if(Subject='数学',Fraction,0))as 数学,   \$ P5 a( l" h4 R; w4 K
  13. sum(if(Subject='英语',Fraction,0))as 英语,
    7 }4 L8 X' p1 r- H1 c( J
  14. SUM(Fraction) as 总分- a3 u- K) J4 [
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,
    ! O$ p  k# F5 b
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,: b6 l0 p( [+ v7 h5 `3 L
  3. sum(case when Subject = '数学' then Fraction end) as Math,# _" g( l5 G0 e0 w
  4. sum(case when Subject = '英语' then Fraction end) as English,
    ' T! Q& J$ z; s0 Y: t' ~( n
  5. sum(fraction)as score
    6 X$ W  H, D. `# U
  6. from t_score group by name3 @2 k6 B- k9 b
  7. UNION ALL  [2 b7 ?0 F4 @3 z+ d
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
    * e3 B$ X2 f' e3 K0 l4 I5 ?/ C( |
  9. select 'TOTAL' as name,# R: s$ D8 z  T) G8 y
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,7 R+ t# O+ k. _) _; o
  11. sum(case when Subject = '数学' then Fraction end) as Math,
    . [  U: a& j' U8 h
  12. sum(case when Subject = '英语' then Fraction end) as English,0 i1 {+ X. f. p" k8 I8 L, [6 F
  13. sum(fraction)as score
    ( [  J& M8 M6 p6 N# U' L9 \* m! h% [
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select
    " B, d- U2 o$ S# w
  2.         ifnull(name,'TOll') name,- E8 }8 H: P( B8 r+ E  H. b/ l
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,6 `4 L7 I. {$ G  T, Z2 I
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,, |4 M9 m' v# u* l  o3 ^" C0 q
  5.        sum(if(Subject='数学',Fraction,0))as 数学,2 x1 N% g; \! \& D
  6.        sum(Fraction) 总分
    % {9 o, O+ D: c. I9 {: `
  7.         from t_score group by name with rollup
复制代码
查询结果如下:

* H1 u; |. s$ B3 l$ a) a( W* b+ p( ?) a) M0 e* [7 a- N/ K$ P, G$ h

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-5-1 09:52 , Processed in 0.038334 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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