召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2393|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
! o. k- p, V# F' K3 x) z0 _9 D要求查询结果如下 :6 Q4 [: V' j- F3 A2 ~2 Z
& J- v5 j/ c( j4 T
; ^; P1 T+ S- [, P" u7 q- f
创建数据库、表
5 u, Y4 m  y7 [) n7 ^
  1. create database tests;' P  t, T8 d5 w- A, S3 b! {! f  L
  2. use tests;" T; s: P- f% G+ ~
  3. create table t_score(
    5 N$ _+ B. K$ L6 U/ s. Y
  4. id int primary key auto_increment,
    & r& I2 }* U. ^, D
  5. name varchar(20) not null,  #名字
    . S* z8 g6 e" ~$ F8 q2 M2 W
  6. Subject varchar(10) not null, #科目
    0 m' T) A: A0 Z- q6 R
  7. Fraction double default 0  #分数
    * T& S2 t" \! N$ o% a- d
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES
    : e( g, ?0 G3 K' B' o: h
  2.          ('王海', '语文', 86),
    ) O9 G1 E; {+ a* X- B5 }
  3.         ('王海', '数学', 83),
    : d" @* g& w; {, N8 M7 h! c1 C( V
  4.         ('王海', '英语', 93),9 t) }6 T0 A. B9 _" P
  5.         ('陶俊', '语文', 88),9 s: @& L6 @! f5 ^' R
  6.         ('陶俊', '数学', 84),- t6 Q$ s. J- h8 D
  7.         ('陶俊', '英语', 94),
    1 O) F. j; Y, k2 {
  8.         ('刘可', '语文', 80),
    ! j+ L: r/ g7 H* j
  9.         ('刘可', '数学', 86)," p. u5 z5 k6 y! v& e( ]3 K; r
  10.         ('刘可', '英语', 88),6 @0 a, A6 R' n8 X
  11.         ('李春', '语文', 89),5 k/ m4 [! U9 w
  12.         ('李春', '数学', 80),  y4 L8 D4 v& `* N) N- h$ Q" b
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,% h# Q, {, t- `9 L2 q
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    ) e: D& l2 D3 j: y- D# }1 I0 {
  3. sum(if(Subject='数学',Fraction,0))as 数学,
    - J* s- m' r! Q, c; A' @6 ?) x
  4. sum(if(Subject='英语',Fraction,0))as 英语," w. A( B4 B6 S$ @  w
  5. round(AVG(Fraction),2) as 平均分,# g7 a1 E. [" a. u" X0 I. {
  6. SUM(Fraction) as 总分
    / C. }0 E8 v! I" `9 N! b# f
  7. from t_score group by name     * p; {  [) X. O. h
  8. union
    - d# P  J; t$ i
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(
      G2 _; n! v1 s1 L( f( F
  10. select 'TOTAL' as name," g& i+ M4 }: |4 |9 l& K1 Q1 _
  11. sum(if(Subject='语文',Fraction,0)) as 语文,' B: v& N5 g! ?9 a3 g4 M4 Z5 T
  12. sum(if(Subject='数学',Fraction,0))as 数学, # \& R% j/ m: H4 W% o# U* e
  13. sum(if(Subject='英语',Fraction,0))as 英语,+ k$ e, I5 P, p
  14. SUM(Fraction) as 总分- u% M  c$ C- G7 [& ?9 m6 y
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,
    5 W2 E( f4 s5 e) Q6 Y. T
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,
    ) V+ x# v3 Z, @# C" _0 i. ?
  3. sum(case when Subject = '数学' then Fraction end) as Math,' h2 v8 l1 Q4 B4 E! v$ H
  4. sum(case when Subject = '英语' then Fraction end) as English,
    & t; U* I3 r& n6 y8 k3 N
  5. sum(fraction)as score. C% ^5 T7 b4 h4 E* o
  6. from t_score group by name
    ! P2 [6 ?/ d8 {/ F
  7. UNION ALL: K& o9 v' E9 i* \$ q, \. M* G
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
    % u% L; U6 H0 }( l+ L/ ], N$ h
  9. select 'TOTAL' as name,
    : a: p) W  T" n7 f
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,4 b' ~7 @3 |  m1 }3 K: T
  11. sum(case when Subject = '数学' then Fraction end) as Math,
    " ^$ x  {$ ~) u) @" g  n/ R' V
  12. sum(case when Subject = '英语' then Fraction end) as English,6 `8 t6 x# v8 a
  13. sum(fraction)as score
    . I) \( [4 y5 p5 f3 _/ P. B
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select
    & `1 i- ~6 S. T/ V! M6 Y$ |
  2.         ifnull(name,'TOll') name,
    0 ~  f1 B5 E& w% m1 B9 l
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,
    ) m  y1 B6 }' \6 O4 b2 J
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,2 V( j0 \+ |' ^6 m3 t* {5 E/ Y
  5.        sum(if(Subject='数学',Fraction,0))as 数学,
    ' u- {' `1 J( D
  6.        sum(Fraction) 总分3 L5 W2 g7 l, T
  7.         from t_score group by name with rollup
复制代码
查询结果如下:

% a9 S% K5 {' E/ f8 ^4 `& p
5 d' n* W7 n+ m! E; H0 C

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-5 09:49 , Processed in 0.043901 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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