召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2265|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
, }; E& l! c0 z2 y" b, j要求查询结果如下 :
) I; I2 R  {/ ^% F+ |5 I) Z: l" Z+ S+ z2 h, u4 o' p! H
/ R8 b" ~' u- J' X
创建数据库、表2 f7 z5 _" `  U+ j; N
  1. create database tests;- g7 l# I) o3 L6 X  I
  2. use tests;* H9 X6 |6 J" S6 F) X4 O  M
  3. create table t_score(; t# Z1 G; Y% h! ~# H2 `0 C
  4. id int primary key auto_increment,, T  L! F! r) |3 E8 N
  5. name varchar(20) not null,  #名字
    8 a  e" ^4 U2 W+ l( e$ _' i0 ?
  6. Subject varchar(10) not null, #科目
    " R  L# n! _3 |8 H6 B
  7. Fraction double default 0  #分数
      F2 R, Y  _" |2 V6 c
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES& A6 E, ~  }! D/ K+ i6 Z
  2.          ('王海', '语文', 86),
    - ?8 }* M* d8 _- ?! l" O# O* W/ f, m
  3.         ('王海', '数学', 83),
      Z. x# I9 ~/ ]1 T, K
  4.         ('王海', '英语', 93),
    4 s. m6 M" N2 ~) N3 M$ h+ `- i
  5.         ('陶俊', '语文', 88),
      c& D  |7 V; G' T
  6.         ('陶俊', '数学', 84),8 U3 C9 i) e  H
  7.         ('陶俊', '英语', 94),
    $ N( f9 \1 u! o* m. Y+ a
  8.         ('刘可', '语文', 80),! s' N3 |3 |: l( R' M- ?, b- L
  9.         ('刘可', '数学', 86),. b5 i9 `, k- |
  10.         ('刘可', '英语', 88),
    ) n2 L; _$ X, w7 \
  11.         ('李春', '语文', 89),$ N9 F+ G% X! V2 x
  12.         ('李春', '数学', 80),
    ' m8 v6 C# j8 P2 |% |4 a
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,
    $ J) P& g" v+ j- I
  2. sum(if(Subject='语文',Fraction,0)) as 语文,
    ) |) k* ?* J  Y3 d7 W
  3. sum(if(Subject='数学',Fraction,0))as 数学, 0 m" _: M( s2 c. _+ O& z  U+ N2 ?
  4. sum(if(Subject='英语',Fraction,0))as 英语,
    5 N4 W; d9 `% c5 W8 D4 C- D* i
  5. round(AVG(Fraction),2) as 平均分,
    - t4 _* Y6 L6 B
  6. SUM(Fraction) as 总分; N5 ]( k$ c  H2 _/ m& r
  7. from t_score group by name     
      m; M5 U) n* n$ @6 ]  t
  8. union
    + k5 q/ [3 }; w/ V
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(4 ^' V) |; J5 O' M7 D# O
  10. select 'TOTAL' as name,+ p8 M5 `& e1 Q# _4 ^8 [2 D
  11. sum(if(Subject='语文',Fraction,0)) as 语文,8 ]4 r/ a0 o2 c/ C, P
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    3 b, g; Y+ c0 L$ R4 f& ?
  13. sum(if(Subject='英语',Fraction,0))as 英语,' n' W3 a7 M! p% ^, H
  14. SUM(Fraction) as 总分
    8 I2 y% x$ ]# r  L) @
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,0 \: _( T2 q0 k2 ?$ W
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,
    0 G, B. D( |) e' t' p
  3. sum(case when Subject = '数学' then Fraction end) as Math,+ T2 Y9 r+ |) H1 Q. b4 x
  4. sum(case when Subject = '英语' then Fraction end) as English,
    . N0 G0 a4 s. R! c$ F$ F
  5. sum(fraction)as score
    ( b6 [" e2 t& {. q
  6. from t_score group by name
    / j( E2 j- Z; f* P3 C$ k
  7. UNION ALL
      v6 ^2 E4 A, t! F/ P
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(6 A# T% y7 n2 F  I# c
  9. select 'TOTAL' as name,
    & Q; m; b' D- S# K* Z
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,
    ; w/ g7 ~; V  p( d8 w3 X# _
  11. sum(case when Subject = '数学' then Fraction end) as Math,- ^- y% P6 W8 o; F
  12. sum(case when Subject = '英语' then Fraction end) as English,9 j3 E* D+ ]* J+ S
  13. sum(fraction)as score
    2 L4 K; W& r& M( f/ o! }2 o
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select " J3 a  \) v0 y6 ?) h* n
  2.         ifnull(name,'TOll') name,- Z# E6 V) o& b5 E4 w$ F  |
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,
    9 A/ @' x9 x* J! p+ b2 l2 u
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,
    1 G3 C, H2 B1 W9 V: r; V5 J4 H
  5.        sum(if(Subject='数学',Fraction,0))as 数学,
    9 {! Q. J+ g9 t" W
  6.        sum(Fraction) 总分
    5 j0 g8 ]" m* \; c* Z  o0 |' m
  7.         from t_score group by name with rollup
复制代码
查询结果如下:
2 J6 z1 [6 q! C' ~- h1 n9 C' {

0 q- C, W) c+ r& B& o! O

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-7-31 02:02 , Processed in 0.032720 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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