召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2367|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
( K% @0 ]6 z# k1 l要求查询结果如下 :
% P' o7 f/ w' R! m% c! G9 O; f  N- U: D3 `
: q- J: H4 t# H$ k
创建数据库、表1 C# `0 z, _& d5 u- k
  1. create database tests;4 w% M, Y$ J) q
  2. use tests;9 j" }. m/ y8 v  Y4 T4 @/ v
  3. create table t_score(
    & F; K/ k- _& }# Y3 s" z
  4. id int primary key auto_increment,
    3 {6 j; J/ o- S# I- j' o' ]- \
  5. name varchar(20) not null,  #名字
    4 P. R" x- S% G  V" P$ l2 H+ ~
  6. Subject varchar(10) not null, #科目
    3 P  k/ O+ b" ^3 b) T8 B; O) S
  7. Fraction double default 0  #分数
    ! e) S6 X4 j) e' Y- a
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES
    ( z4 Y* O' v; \1 l
  2.          ('王海', '语文', 86),
    0 s1 O1 |) X7 {4 P
  3.         ('王海', '数学', 83),/ D% m9 t. m  ~
  4.         ('王海', '英语', 93),
    , f. @( j7 o8 W5 q' |
  5.         ('陶俊', '语文', 88),4 p( h3 ^: g4 {
  6.         ('陶俊', '数学', 84),
    ) A4 Y' N. E  r& J2 B" }$ g
  7.         ('陶俊', '英语', 94),
    & ~7 Y1 b& j' A2 {7 E! d9 b7 G
  8.         ('刘可', '语文', 80),
    8 V; N" ?( i' d
  9.         ('刘可', '数学', 86),
    4 `0 t8 H7 R, Q) c% _2 I3 @
  10.         ('刘可', '英语', 88),6 e5 z9 k1 G  ]
  11.         ('李春', '语文', 89),
    ! h( @) J: g) m0 f6 k: O( u
  12.         ('李春', '数学', 80),, C0 U" g1 F! L
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,
      P: r! `$ w- U  `' ~
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    " ^1 u: ?3 D. O, l6 I
  3. sum(if(Subject='数学',Fraction,0))as 数学,
    & U! D( q, E( ~# U
  4. sum(if(Subject='英语',Fraction,0))as 英语,
    $ I% m. g6 q; m$ n7 @, N
  5. round(AVG(Fraction),2) as 平均分,
    3 C7 @4 t& O- L: l8 [6 K
  6. SUM(Fraction) as 总分
    + k# l) S6 C7 s) U8 k
  7. from t_score group by name     ! X5 T/ i/ M0 z& M0 K1 t7 j
  8. union9 s: ?" P" y. _% @
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(
    " c# K8 p0 T' A; y1 {3 L' v
  10. select 'TOTAL' as name,3 G5 b( h7 w3 C; j  d
  11. sum(if(Subject='语文',Fraction,0)) as 语文,4 S; h# b) Z) D( S3 D% ~
  12. sum(if(Subject='数学',Fraction,0))as 数学, 5 u6 d7 a1 h+ e
  13. sum(if(Subject='英语',Fraction,0))as 英语,* @8 t$ t+ B9 l9 B
  14. SUM(Fraction) as 总分% e; S# l: m8 L  }) \5 t
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,. Y* ]. N' T: }# ]# f. V: i
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,* K4 f% a2 i7 _4 }
  3. sum(case when Subject = '数学' then Fraction end) as Math,
    2 Q, O+ N8 f5 p! y. I
  4. sum(case when Subject = '英语' then Fraction end) as English,
    4 G* c+ d/ e& j& t7 [
  5. sum(fraction)as score
    0 K" I& s0 A6 s" W7 _3 O
  6. from t_score group by name
    2 H1 R# R0 j6 I. s& S: a
  7. UNION ALL
    - Y# i/ F: ^) u4 R, R8 p2 h
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(6 Y" {+ O7 o2 G  F
  9. select 'TOTAL' as name,
    8 F3 f9 @1 j4 f+ L
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,. ]/ C( L" n, ?& }! E
  11. sum(case when Subject = '数学' then Fraction end) as Math,6 j) b% X  C( L, C
  12. sum(case when Subject = '英语' then Fraction end) as English,& P, O" ]0 D: f/ n4 }: B. b
  13. sum(fraction)as score& `( o: o, J/ i6 s
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select " Y  c9 A' m* s% E8 P, ]
  2.         ifnull(name,'TOll') name,
    9 J+ f3 F" w9 k
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,5 H4 K. \$ a5 q# {
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,
    ; C7 C; S7 I. m' w
  5.        sum(if(Subject='数学',Fraction,0))as 数学,2 n1 ~: |, R$ s
  6.        sum(Fraction) 总分
    . N, `0 p. ]& e$ R& |0 n. x
  7.         from t_score group by name with rollup
复制代码
查询结果如下:
1 Z9 c( e' R; h- ~- ^( f  U
+ l  U$ r; E& {$ e

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-11-25 17:03 , Processed in 0.038620 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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