召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2713|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
/ M) r* z# U( ~0 N要求查询结果如下 :, w, V% m2 X& O- ?
) S, L6 B$ ^  @

  t2 y% b9 T$ @1 x创建数据库、表
3 L( d& v& r7 l3 a7 s6 Z
  1. create database tests;1 H$ X+ U: M& w
  2. use tests;* N7 O8 h3 A4 n" Q( M; a
  3. create table t_score(! Y& T0 ~! ?+ B4 v0 p
  4. id int primary key auto_increment,; x8 {; x9 s+ |3 M
  5. name varchar(20) not null,  #名字
    ' H0 @) u- J3 x3 O0 j/ F6 Q+ @
  6. Subject varchar(10) not null, #科目
    ! U( v/ X: N! X5 `8 y# k
  7. Fraction double default 0  #分数
    5 O( g& b. f9 ~' b" W3 q
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES9 ~, u! {% m8 {) ~
  2.          ('王海', '语文', 86),
    3 I! m% u4 Y. c- U5 z! R
  3.         ('王海', '数学', 83),
    2 z% n5 d+ O& J# |
  4.         ('王海', '英语', 93),
    8 ~: x1 L7 B% ~1 Z* y
  5.         ('陶俊', '语文', 88),
    & R& H* \7 P% v5 u$ b$ x
  6.         ('陶俊', '数学', 84),
      C7 S* t( y5 E$ e! K* y) H6 F  ~
  7.         ('陶俊', '英语', 94),4 E# x9 d5 R2 s, p$ Y: e3 f8 z
  8.         ('刘可', '语文', 80),$ D, x* m/ s% ^2 U
  9.         ('刘可', '数学', 86),
    ; O' G2 e5 [: n; c
  10.         ('刘可', '英语', 88),
    % c6 ^% x2 R6 [
  11.         ('李春', '语文', 89),
    2 |3 }2 t& Y- V1 W
  12.         ('李春', '数学', 80),, u! p# o  d& M# Q& [; I8 \1 R/ K
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,
    & O5 }2 v1 O- r3 J2 G2 G) W0 J
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    6 ^" i( W7 V  X  F, \" W1 h
  3. sum(if(Subject='数学',Fraction,0))as 数学, 7 f2 g: w+ ^; t% E* ]9 [. W5 ?
  4. sum(if(Subject='英语',Fraction,0))as 英语,! B) Q+ J7 @: x8 s( B+ B
  5. round(AVG(Fraction),2) as 平均分,! ^% l+ X/ U! }* z  e
  6. SUM(Fraction) as 总分5 |" }+ s7 ^. D6 H& L: B7 c
  7. from t_score group by name     ( G1 t5 `5 z1 a* }1 {
  8. union
    , \7 p! W  z, ?7 e
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(" l! W4 j6 c" U: k
  10. select 'TOTAL' as name,# O/ m2 [. c  m; ]5 @
  11. sum(if(Subject='语文',Fraction,0)) as 语文,, w2 T# c1 K' W: [/ h" y
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    0 S3 ~6 A1 p7 U+ K" }& q! `% ]
  13. sum(if(Subject='英语',Fraction,0))as 英语,
    ; \$ X. s' ?- @1 K: E5 t0 J3 ~
  14. SUM(Fraction) as 总分
    ; f( i. d$ j5 g+ @  G7 J  p
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,$ A3 e2 f: ^& V2 u
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,
    ! E7 l. U" G, M( m" W: e
  3. sum(case when Subject = '数学' then Fraction end) as Math,8 D  P& A1 i/ r8 Y
  4. sum(case when Subject = '英语' then Fraction end) as English,
    + L& f6 h" E' S$ G4 b' n; ]6 m
  5. sum(fraction)as score# S5 O3 l4 Y2 V; e) ]. K2 l( @% t4 S
  6. from t_score group by name
    7 y' b6 A8 S" _0 U0 w1 b, U
  7. UNION ALL' l* D9 _  }  J, R
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(/ a$ g3 n, j! O$ a% `
  9. select 'TOTAL' as name,
    ' E# ]# u' M( @9 X" Q) F# v+ A
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,
    & |0 e  e6 F7 Y; q( O- p# p5 F
  11. sum(case when Subject = '数学' then Fraction end) as Math,
    ( O) {2 C% [# [0 R' \) t
  12. sum(case when Subject = '英语' then Fraction end) as English,$ s1 q+ W' p( ^, ]
  13. sum(fraction)as score
    & P* p0 p0 e. N. k. t
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select + y9 w7 z* o* J, U* W- V$ c% i
  2.         ifnull(name,'TOll') name,
    , i8 c8 F3 U4 N; V5 M5 F- Z
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,
    + x' n7 h9 t# |+ V0 u. v2 P
  4.        sum(if(Subject='英语',Fraction,0)) as 英语," z4 o9 A' J" E  d4 [+ `
  5.        sum(if(Subject='数学',Fraction,0))as 数学,: [0 q" \6 a1 \3 b0 c5 y. m
  6.        sum(Fraction) 总分
    2 w4 W' {! Z# ~9 Y: ?9 Y/ e
  7.         from t_score group by name with rollup
复制代码
查询结果如下:

, c8 P. k( v3 }2 Z" }2 q! z+ G. b6 S7 q$ z6 I: o& r0 b' c

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-6-27 08:42 , Processed in 0.032623 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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