召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2655|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:3 J1 }5 |& _/ U$ c9 W: r
要求查询结果如下 :
6 W/ H9 `( I9 X  a; C2 ~8 o3 y: s% l0 [' o) B) a
$ j9 s  V2 b7 t, A$ F; O  M
创建数据库、表
' D5 ^) _/ N0 y  Y) g, E% L5 J% r8 H
  1. create database tests;' i" K; [  b& {
  2. use tests;' L- H3 I# {1 W+ P
  3. create table t_score(
    ' s' f7 I3 Y# r' y( z9 _
  4. id int primary key auto_increment,% k, b* ^; ~& I! ?( Z8 c
  5. name varchar(20) not null,  #名字
    1 a/ W; P( g. G( Y: E1 t" h1 c
  6. Subject varchar(10) not null, #科目' D% F: v, ~1 h1 r/ O. K9 p% k# t5 H
  7. Fraction double default 0  #分数4 W$ [2 h5 z. s  l+ \* m
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES
    4 ?" V( M( h4 w& U
  2.          ('王海', '语文', 86),- s/ J( R3 I& M  M" x# Y4 ^" G2 i9 T& N
  3.         ('王海', '数学', 83),# H6 G- n. @% E2 N
  4.         ('王海', '英语', 93),% ^" F5 V" `  \+ q
  5.         ('陶俊', '语文', 88),8 `0 C7 C' n. l1 ?- x6 F# t) K
  6.         ('陶俊', '数学', 84),3 ~2 |8 S6 g: c: n/ o: x
  7.         ('陶俊', '英语', 94),
    / ~7 P1 x" [. l6 U; j
  8.         ('刘可', '语文', 80),
    5 v/ X2 d9 ?3 C. k( q
  9.         ('刘可', '数学', 86),% O7 Q9 [+ l( C& P) y! `) s3 R; T3 n
  10.         ('刘可', '英语', 88),
    ( I5 Q* {& J* a, S- ]+ b
  11.         ('李春', '语文', 89),: @. u: M" \! K1 h# }  W
  12.         ('李春', '数学', 80),
    , V; X4 B$ ?8 E3 x
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,
    , h: ^) W( N8 D$ }
  2. sum(if(Subject='语文',Fraction,0)) as 语文,8 ^+ I+ o, h& G6 n' u) {8 ?+ n. D/ D) X
  3. sum(if(Subject='数学',Fraction,0))as 数学, : A! O$ B, S5 f, W
  4. sum(if(Subject='英语',Fraction,0))as 英语,8 {. F1 z$ x$ i1 ]# P5 y) c) q1 U, {
  5. round(AVG(Fraction),2) as 平均分,
    $ c- E& R% z8 ^: N0 T: K3 O( K
  6. SUM(Fraction) as 总分" Y6 t  X7 v$ G9 m
  7. from t_score group by name     
    2 z4 k( {( |9 a. K& _
  8. union
    . v# i4 d2 E& q  j4 f
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(2 G- o4 ~) }& r) Y4 e9 s
  10. select 'TOTAL' as name,
    7 v  F" N) q5 Z& B4 w
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    % b( Q; L" B9 O6 J/ w
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    3 a, @5 p; c% ~0 A0 _
  13. sum(if(Subject='英语',Fraction,0))as 英语,, `/ ]$ \1 q7 C6 ~6 o7 {# X
  14. SUM(Fraction) as 总分
    3 ^. I. H7 p3 Z$ O2 W  b
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,
    ' b3 p/ o; }, e4 `) T( g! D
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,# r5 D, T5 M7 Y% h
  3. sum(case when Subject = '数学' then Fraction end) as Math,
    7 W( X! r, ~2 t5 }6 A! u
  4. sum(case when Subject = '英语' then Fraction end) as English,
    , y  s- _' `5 B" n& c
  5. sum(fraction)as score
    * y0 I5 X8 w& F( {- K
  6. from t_score group by name
      `$ h" q, v5 ]! B
  7. UNION ALL7 h  W2 T0 b3 Q! s9 K( X' p" A9 ^
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
    3 F* m. E( u# t) J# b
  9. select 'TOTAL' as name,
    % ~5 G( o: j/ k' ?
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,
    % D$ L: r; p% _3 Z, I$ E/ ~' x. h
  11. sum(case when Subject = '数学' then Fraction end) as Math,
    / E. D- G5 F, h% I
  12. sum(case when Subject = '英语' then Fraction end) as English,
    % K+ F5 O3 p7 i7 L1 E$ P
  13. sum(fraction)as score  O& m+ u$ F. C2 W$ w' @# Y
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select # l' N- W+ j% {# W% }
  2.         ifnull(name,'TOll') name,
    : v0 c; s3 u! J; |1 p% ]/ O4 R
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,$ A4 I; h, R* _* r( p% U
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,% {: \+ u0 s% O6 }5 H2 K9 K
  5.        sum(if(Subject='数学',Fraction,0))as 数学,) O) A5 ?+ X2 M9 D9 _
  6.        sum(Fraction) 总分. o& B9 m0 ?3 f* w+ O- I
  7.         from t_score group by name with rollup
复制代码
查询结果如下:

+ _8 Z5 K# L$ z" @) c/ M
3 G2 \- |9 h: n1 g

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-5-23 14:47 , Processed in 0.034670 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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