召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2306|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
) L) R; ~% b' K5 S! [$ R要求查询结果如下 :
9 B2 V' ?' i. B7 K( N7 p
9 S- H! F! c  F4 `  K1 R/ H- b& l
2 b/ o; j& J: s4 t2 K* s: d3 f" L创建数据库、表' o5 Q2 v! u, D
  1. create database tests;: q% Z: [/ y5 d1 a
  2. use tests;
    ' a; A/ `; M! f: L
  3. create table t_score(' q( S+ ~: k* T. b6 W
  4. id int primary key auto_increment,
    $ A$ i' S1 o5 N! u6 J
  5. name varchar(20) not null,  #名字
    * d' x1 B2 s6 T* A8 @) u: W$ Z) ^( w
  6. Subject varchar(10) not null, #科目
    " Y$ O" y/ V+ N  Y5 v: p! `9 ~
  7. Fraction double default 0  #分数8 n, c3 s. e+ E7 ?
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES# p+ S' X, ^3 W9 O0 j+ V9 |
  2.          ('王海', '语文', 86),
    7 c% i) J: k: W5 T8 y0 Y9 G* H
  3.         ('王海', '数学', 83),5 ~+ ]$ {8 ~' l. R3 k4 ?+ V. E
  4.         ('王海', '英语', 93),
    - }8 X+ O; L. W- S
  5.         ('陶俊', '语文', 88),
    # u7 S. }% n& f2 e
  6.         ('陶俊', '数学', 84),; p2 s4 w0 s/ d
  7.         ('陶俊', '英语', 94),& T1 f2 q" h0 a: e
  8.         ('刘可', '语文', 80),7 Q! L: u/ Y; {/ L8 o
  9.         ('刘可', '数学', 86),
    & L# U- y1 Y: |- W% _
  10.         ('刘可', '英语', 88),  [; y7 i& r* J, [6 i
  11.         ('李春', '语文', 89),
    0 p, l( |. o2 d
  12.         ('李春', '数学', 80),
    9 a7 Y: Q/ N7 l
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,- S4 L) p1 ^, f7 g& v5 A
  2. sum(if(Subject='语文',Fraction,0)) as 语文,' u5 _4 N  {0 ^! L- v6 ^" M
  3. sum(if(Subject='数学',Fraction,0))as 数学, 9 W9 Y; e: U, \  Y7 c6 Y
  4. sum(if(Subject='英语',Fraction,0))as 英语,! O( X) g" h" l9 z5 }5 Q& {
  5. round(AVG(Fraction),2) as 平均分,
    * e- k& ?" M7 m1 @7 {. T  M# _& d
  6. SUM(Fraction) as 总分
    ) x4 x/ l) ^  H( Q
  7. from t_score group by name     
    ) ]: \, c: a9 Z+ Z3 {5 k, h! g2 t
  8. union
    0 D6 V% \$ ^# t, c9 {% {! _
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(' Q/ d! n+ ?1 ]" e/ R! D7 A5 B
  10. select 'TOTAL' as name,+ ]. h" \9 }2 Q4 t# o; ]7 H" V
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    ( j/ o+ |! C7 j3 L# j4 o
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    ( r7 t) U8 r% `( P  n
  13. sum(if(Subject='英语',Fraction,0))as 英语,5 w' v9 x, B! t' n# h- P
  14. SUM(Fraction) as 总分
    " G* n" s5 X0 \5 R* c+ m% w
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,- r1 J% B. P! A; Y& z
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,
    " w5 q3 Q. z0 m  C# O' M9 a0 K
  3. sum(case when Subject = '数学' then Fraction end) as Math,5 A" R) v( X4 c" y! E$ a* m" X  c
  4. sum(case when Subject = '英语' then Fraction end) as English,
    6 s0 x# ], s9 @( @6 M
  5. sum(fraction)as score
    * Z, G2 F: M# X- z* y
  6. from t_score group by name
    3 @5 [2 d1 O6 T9 J$ j$ h3 q6 E- Y( s
  7. UNION ALL4 a2 K; X! I5 Z1 D) x5 F
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(6 s; q( f7 \" o- a8 \+ }) M
  9. select 'TOTAL' as name,! O# p3 s! X9 l# [' ^6 o* V7 u+ y
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,) L: N7 Z# @- g) a
  11. sum(case when Subject = '数学' then Fraction end) as Math,2 V2 Y5 g3 J+ Y" ~% n: f2 ~
  12. sum(case when Subject = '英语' then Fraction end) as English,
    . }! ^2 ?9 F3 a$ |4 B6 S
  13. sum(fraction)as score# a3 X0 P/ b/ n# S& }9 U7 o7 G/ H
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select
    " p0 U* S# q/ H
  2.         ifnull(name,'TOll') name,% n  R* p  e. x0 u2 c6 M
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,' x' r2 x! R9 ~/ t! _) y$ H8 k
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,
    8 }# c/ p9 }: r( i8 O' G2 q
  5.        sum(if(Subject='数学',Fraction,0))as 数学,
    7 F, k+ f$ p: D( c* Z
  6.        sum(Fraction) 总分8 r9 k6 ~1 F9 g( l9 O  ?% `  V
  7.         from t_score group by name with rollup
复制代码
查询结果如下:
- M( |4 u/ t0 m( H0 r7 T, {

/ x3 n7 }0 S4 L: Y3 V5 x) V' U% W

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-14 09:18 , Processed in 0.031202 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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