召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2286|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
9 s" u/ a) a2 F要求查询结果如下 :5 E! i" ]9 K! P" e5 B8 P; |* F
* D, j& G. z* ^% s, q% w9 m5 X3 R3 E$ O
8 f1 M5 Z, j( c6 N7 X+ s
创建数据库、表& Q- E# s4 [! z2 L3 j- K- F: i
  1. create database tests;
    ) \" o# y7 z6 W! q& _7 o* `! B* b
  2. use tests;
    4 n9 d( a5 l9 F+ ?" ?+ q
  3. create table t_score(
    / @" c. B* ]8 E6 U4 x
  4. id int primary key auto_increment,
    1 ]6 p8 A, F8 W6 u: O! R9 V, G$ o) J
  5. name varchar(20) not null,  #名字
    , K: F1 X# d) ?! l% [8 X6 R
  6. Subject varchar(10) not null, #科目
    $ T9 ~6 |  w2 }9 i9 q
  7. Fraction double default 0  #分数
    / {4 Q+ c& M/ F& p' w
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES( n( y5 C) t5 a3 f
  2.          ('王海', '语文', 86),
    $ Q" R: Q: ^& H7 Y
  3.         ('王海', '数学', 83),
    9 g! }4 u4 E  ]& h" h7 S4 c7 E
  4.         ('王海', '英语', 93),2 x4 \$ C: t$ ~
  5.         ('陶俊', '语文', 88),: ]% I& e! U1 c  j
  6.         ('陶俊', '数学', 84),
    - ]; |& K+ h! e# [
  7.         ('陶俊', '英语', 94),- _4 ^6 ^+ ^8 o8 l* F; T
  8.         ('刘可', '语文', 80),
    8 h% L" ?. F2 ^" e  a
  9.         ('刘可', '数学', 86),
    : l) d8 J* Y3 L# Q. U9 t* e) y
  10.         ('刘可', '英语', 88),7 H( w, ^$ `3 T+ g/ b5 ^
  11.         ('李春', '语文', 89),
    ) h! F- |# @& B) j
  12.         ('李春', '数学', 80),. D* |. @$ V+ T6 ~+ y6 e
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,
    # j( D: ?: o: V* E3 l% i7 E
  2. sum(if(Subject='语文',Fraction,0)) as 语文,4 p7 `3 m/ l. X7 w
  3. sum(if(Subject='数学',Fraction,0))as 数学, 5 b" R; T9 p; e# h
  4. sum(if(Subject='英语',Fraction,0))as 英语,# K& ~8 l8 K* N! X) o* s
  5. round(AVG(Fraction),2) as 平均分,* j! ]; h6 f8 a' T
  6. SUM(Fraction) as 总分
    / Z- `9 P; Y$ R: l' H2 K2 A6 O3 v; `
  7. from t_score group by name     7 x8 Q: ?8 ]' ~. T2 D1 v* y
  8. union; u: t7 O; R3 r6 b
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(, \! x4 T( }9 p9 i* z7 N3 {
  10. select 'TOTAL' as name,4 R' C; p7 r. B7 r' F
  11. sum(if(Subject='语文',Fraction,0)) as 语文,
    2 S2 V( \' T# _& ~8 G3 c. A
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    6 G; w  I# g( z3 {1 _. I) ~) R
  13. sum(if(Subject='英语',Fraction,0))as 英语,$ s% F# I" ~7 \+ }! v
  14. SUM(Fraction) as 总分
    9 `0 P1 U% }4 t1 Z
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,0 r! c( ^4 q# D& b, Y3 k# a* O: n
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,7 W2 Z: ^: C) C0 R
  3. sum(case when Subject = '数学' then Fraction end) as Math,6 u: l) r9 _& o; g2 Y/ q- S
  4. sum(case when Subject = '英语' then Fraction end) as English,: I' g3 l( s' a5 _/ f7 G
  5. sum(fraction)as score
    $ `; u& _- Q' m! j- y
  6. from t_score group by name
    0 ^0 N7 x  M9 Q' U( j1 g
  7. UNION ALL. E) q1 A% t- q0 e4 K5 b, G
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
    ) {5 q  \6 {" B  o2 L$ E7 z
  9. select 'TOTAL' as name,6 P3 U' X5 _# e6 s3 H) {7 @
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,
    ( w( U& o% u& S9 Z3 R8 G
  11. sum(case when Subject = '数学' then Fraction end) as Math,
    4 {  d2 y* S; Q9 {
  12. sum(case when Subject = '英语' then Fraction end) as English,
    : S4 e( Z4 L5 j
  13. sum(fraction)as score' |3 o* ^8 R; u6 B, b
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select
    ; k* H& K8 F6 [
  2.         ifnull(name,'TOll') name,/ k1 ]) @9 K/ k$ D/ {3 O
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,6 P+ i) U  T8 C4 z
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,  D# I+ T  g! ]% D
  5.        sum(if(Subject='数学',Fraction,0))as 数学,
    8 k+ m! m) ]. ^& ?+ ~7 f
  6.        sum(Fraction) 总分) u0 E/ C: |5 \7 F6 _# _3 G5 s6 w
  7.         from t_score group by name with rollup
复制代码
查询结果如下:

6 U! o% D  C* c/ l$ o' W7 T; E- K1 p

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-8-22 06:50 , Processed in 0.031173 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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