召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2890|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:
) X* X  f* K4 y1 e4 k$ q) `要求查询结果如下 :' j7 [& M3 M' Y) T. `; d( B

% ^$ i$ K6 W0 K/ p- N6 z* f5 Y9 g# x& z& r" v2 S8 g% h- I/ @, G
创建数据库、表
3 B* O$ _. k1 T  b- u1 Y+ J( t
  1. create database tests;) U& ~* Y; e: j& {
  2. use tests;
    6 i  \7 s$ z$ [, P/ Z% X
  3. create table t_score(
    ! Q, A- v- n* l$ O% j) T* P
  4. id int primary key auto_increment,4 p/ [6 `: z, ?7 Z# `
  5. name varchar(20) not null,  #名字
    + c4 z' v% p) C" i
  6. Subject varchar(10) not null, #科目
    6 o5 C0 C, q* p, t( o
  7. Fraction double default 0  #分数
      `7 ~$ L# f/ t  h0 z
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES
    1 C0 }" d7 H5 i( R+ W" q
  2.          ('王海', '语文', 86),! B( a0 t' _" X: f& {5 s* b
  3.         ('王海', '数学', 83),& P) M$ B9 c) v3 Y  r( b
  4.         ('王海', '英语', 93),# v, X1 B- t! P1 y( t
  5.         ('陶俊', '语文', 88),. R" U" h9 A1 o0 G2 `
  6.         ('陶俊', '数学', 84),2 _+ P3 L$ y3 ]/ {; c7 U1 ^6 ^8 `: R
  7.         ('陶俊', '英语', 94),, u4 h/ f7 I% \- H
  8.         ('刘可', '语文', 80),
    8 k; \+ s" e* j2 H
  9.         ('刘可', '数学', 86),
    ; y) K+ Z+ U- [) h; `& w* {1 T
  10.         ('刘可', '英语', 88),3 f/ n3 B" r9 M
  11.         ('李春', '语文', 89),0 d* `. v" u4 R
  12.         ('李春', '数学', 80),
    % D9 a8 e* U7 p$ U( j
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,. N$ I4 O, D7 ^3 L
  2. sum(if(Subject='语文',Fraction,0)) as 语文,! J2 D4 x3 d8 X3 P, }
  3. sum(if(Subject='数学',Fraction,0))as 数学, " N$ I8 q3 {$ b, m. T- a
  4. sum(if(Subject='英语',Fraction,0))as 英语,& L7 m0 n4 e. `  t1 @1 q
  5. round(AVG(Fraction),2) as 平均分,
    2 B% }" s4 `4 p1 |# E1 L2 D+ g9 R
  6. SUM(Fraction) as 总分
    0 c+ v+ \8 _# g) L/ U! J% a
  7. from t_score group by name     3 z* l# J! D0 e! v- d
  8. union( N- `( b7 s+ _7 E) h+ i
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(- H7 Y# n# n" x& J; x
  10. select 'TOTAL' as name,
    + i' ?6 g1 @% V; M; k! W) L( G# h
  11. sum(if(Subject='语文',Fraction,0)) as 语文,3 w+ v$ G: I* M! Y
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    0 Y& s$ c$ g- _' B; J
  13. sum(if(Subject='英语',Fraction,0))as 英语,
    # t+ M( Q# J; `
  14. SUM(Fraction) as 总分* x, T) w: o# r! Z  r& K
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,
    5 Y* S# G+ n; o
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,4 o  r1 W* u' E3 n8 S
  3. sum(case when Subject = '数学' then Fraction end) as Math,& p# ^- l9 O5 x6 W. {
  4. sum(case when Subject = '英语' then Fraction end) as English,
    0 _$ Y, z1 h; R) {" M! r- H' |' S
  5. sum(fraction)as score( @( n" U* j- Q( E7 e
  6. from t_score group by name) v$ u0 D' ~4 j1 H9 r
  7. UNION ALL! P( G  d' q7 b
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
    ) {8 Z9 z+ |3 s: `# Y8 f' [
  9. select 'TOTAL' as name,
    4 u0 o  \3 \+ ^0 f" g( d' ?
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,
    : H; X5 G9 `! r! S
  11. sum(case when Subject = '数学' then Fraction end) as Math,, Y# x! F; S) p, n. Z# e
  12. sum(case when Subject = '英语' then Fraction end) as English,2 N% r1 @3 ?) r4 M+ y
  13. sum(fraction)as score
    7 |3 y+ t6 o9 m3 w! ]
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select
    / [# v2 A) j) p6 Z  _# [
  2.         ifnull(name,'TOll') name,3 p4 q, }# a, V9 T9 j0 o# A
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,
    & l3 b1 U  E8 Z! j5 {+ ?. c" Q# {) m
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,1 W0 R& z8 [  C1 T4 Z, B1 R" m
  5.        sum(if(Subject='数学',Fraction,0))as 数学,1 T5 V/ c8 `, l0 u
  6.        sum(Fraction) 总分; T3 s, n% W5 T
  7.         from t_score group by name with rollup
复制代码
查询结果如下:
" _0 q* Z' W  e' e, P" ~3 @
3 j3 l+ Z2 R. ^5 j" n7 b

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-9-29 04:56 , Processed in 0.034625 second(s), 27 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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