召隆企博汇论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2485|回复: 0

mysql行列转换

[复制链接]

24

主题

5

回帖

199

积分

公司现有员工

积分
199
发表于 2019-12-9 11:14:57 | 显示全部楼层 |阅读模式
原始插入数据如下:. o* x6 q  O; f- _3 m" \3 ?
要求查询结果如下 :
% m# F6 j; K6 X* F, q0 ~
/ l4 j% o6 {6 w( S( _% X
( W: L( {) O, u创建数据库、表: _% J1 o! f& R% x
  1. create database tests;
    6 S. T0 Q4 E+ H5 j
  2. use tests;  e, t/ n6 t2 P3 j
  3. create table t_score(4 s- ^. S2 k  f: n
  4. id int primary key auto_increment,# z3 H' z% `$ T$ C& {4 w6 |
  5. name varchar(20) not null,  #名字
    ( ^0 u8 ~/ a& w/ g( u% D
  6. Subject varchar(10) not null, #科目: C& M3 Q6 A5 D# @$ G, G
  7. Fraction double default 0  #分数# J) M5 c+ P, T& l
  8. );
复制代码
添加数据
  1. INSERT INTO `t_score`(name,Subject,Fraction) VALUES
      v7 C+ D: t4 f6 J- k+ @7 e
  2.          ('王海', '语文', 86),, _; ]5 {, H, q& W
  3.         ('王海', '数学', 83),
      J" W$ O+ P* P0 E  c
  4.         ('王海', '英语', 93),
    1 U3 q5 Y* V4 P- O# B) o8 ^+ f# E
  5.         ('陶俊', '语文', 88),) N$ d. q, S' p0 M* ?
  6.         ('陶俊', '数学', 84),
    3 ?1 b: f- W  M% N7 ~
  7.         ('陶俊', '英语', 94),
    " n/ K1 `, w/ Y
  8.         ('刘可', '语文', 80),
    6 f  ^0 U" s. w9 P0 ^
  9.         ('刘可', '数学', 86),( O, m/ v# T7 b- x+ a' l& |; o
  10.         ('刘可', '英语', 88),
      G: E' r& a, O) M
  11.         ('李春', '语文', 89),9 ^% P9 Y9 H3 i
  12.         ('李春', '数学', 80),
    6 W# e/ H% }9 E. `+ }4 Z% }
  13.         ('李春', '英语', 87);
复制代码
方式一:使用if
  1. select name as 名字 ,' u  j/ m8 Q$ R" e6 ^. e
  2. sum(if(Subject='语文',Fraction,0)) as 语文,* R  [8 B, U3 o0 k3 ]8 V; q3 Z
  3. sum(if(Subject='数学',Fraction,0))as 数学, 7 Y, D8 m$ |8 R, y7 K3 c1 u
  4. sum(if(Subject='英语',Fraction,0))as 英语,1 a$ t7 x8 ?! |8 A- R
  5. round(AVG(Fraction),2) as 平均分,; U" y# f5 O6 p) n
  6. SUM(Fraction) as 总分3 C# \  D+ e+ [
  7. from t_score group by name     
    ; F, _9 k1 m+ `5 E
  8. union, }" r9 f4 C6 b+ S
  9. select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score  from(6 {" s$ E6 J2 |5 ~# e
  10. select 'TOTAL' as name,
    / m) {7 `8 o0 A4 I
  11. sum(if(Subject='语文',Fraction,0)) as 语文,6 G* M4 G- X6 Q% u
  12. sum(if(Subject='数学',Fraction,0))as 数学,
    3 B" d+ {' R' y8 O1 M, m1 w
  13. sum(if(Subject='英语',Fraction,0))as 英语,. A* {( [' i& I9 j- U
  14. SUM(Fraction) as 总分
    + y% G9 G0 o" H& P/ C- z8 I
  15. from t_score group by Subject )t
复制代码
方式二:使用case
  1. select  name as Name,6 S8 g& J" S* r4 v1 T8 }1 J; g! N
  2. sum(case when Subject = '语文' then Fraction end) as Chinese,/ @2 ^. f5 ?5 m! g( _" R
  3. sum(case when Subject = '数学' then Fraction end) as Math,' g9 E* Q( {8 [! A4 G
  4. sum(case when Subject = '英语' then Fraction end) as English,
    , R3 C0 o6 J) r' C
  5. sum(fraction)as score+ G3 W' B' m& D3 [4 b) o
  6. from t_score group by name
    / Y$ L; e: P! X: `
  7. UNION ALL
    0 \$ K* ~4 t6 q! H: C
  8. select  name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(- Q* W, v) X4 k- `
  9. select 'TOTAL' as name,, R7 G. Q* K% W! ^
  10. sum(case when Subject = '语文' then Fraction end) as Chinese,4 c" k! [; P2 n, H
  11. sum(case when Subject = '数学' then Fraction end) as Math,+ q4 w3 u5 n2 ]' N
  12. sum(case when Subject = '英语' then Fraction end) as English,7 P! g  x+ j6 @, ^" U# q
  13. sum(fraction)as score# p1 b6 [$ x* {" m9 ]$ q, [! l
  14. from t_score group by Subject)t
复制代码
方法三: with rollup
  1. select / S9 T" [( m* Y4 S- e1 y
  2.         ifnull(name,'TOll') name,
    " J% \, _; ]$ O# V2 X/ T+ c/ f
  3.         sum(if(Subject='语文',Fraction,0)) as 语文,
    ! B: B$ b3 ]" k0 ?) k
  4.        sum(if(Subject='英语',Fraction,0)) as 英语,
    / d, d; F8 k$ j. _7 f! |
  5.        sum(if(Subject='数学',Fraction,0))as 数学,
    & H' C! ~9 G5 B7 B8 k+ y8 U7 h
  6.        sum(Fraction) 总分5 L: G3 ~5 x: B, r+ {# L+ [
  7.         from t_score group by name with rollup
复制代码
查询结果如下:
, ^7 e' s  b7 ~2 w
5 `2 ~" M# {: |+ H

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-12 10:41 , Processed in 0.034657 second(s), 26 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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