|
|
原始插入数据如下:
/ D, u9 j/ E! v2 K- p, Z要求查询结果如下 :. a6 D8 W+ u$ J+ |/ m
) j) b/ o1 |3 {) M" [( P, ~% Z
% f- n# V( e- G$ `! M* H
创建数据库、表
% t# c6 }1 k% `0 d; g0 ^' ~- create database tests;
5 p, |, R, j6 x6 W2 e* F - use tests;+ w# J4 _" T' u! ]& v0 h' @, |
- create table t_score(- W# ^9 k$ m5 \: V& S$ z% [
- id int primary key auto_increment,* ]0 Q/ N% ^$ F' Y1 c& M: ` t
- name varchar(20) not null, #名字
P8 p1 l: V" p6 G/ E( V: \2 d - Subject varchar(10) not null, #科目
" n; d8 g" E, O - Fraction double default 0 #分数2 t0 [4 d: i0 _( t3 d& _
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES6 b v6 }2 s* F) b
- ('王海', '语文', 86),
) {* k5 p; H6 `2 q - ('王海', '数学', 83),
) ~/ y g3 Y4 H( T - ('王海', '英语', 93),
" R# e- ?* i: I. L! G - ('陶俊', '语文', 88),1 F1 C0 K* e# e3 @/ z; m/ s
- ('陶俊', '数学', 84),1 Z4 u5 L8 Q5 h; s0 j W: K( w* _! R+ r
- ('陶俊', '英语', 94),+ C. E7 [; @! @. k! }) | S9 V H$ O
- ('刘可', '语文', 80),
q: q& r8 \( L - ('刘可', '数学', 86),
! e, l5 C$ t) S z- c7 K5 t/ |; R; Z - ('刘可', '英语', 88),( R( q+ A. V: j1 T, V% K' A4 H
- ('李春', '语文', 89),
! k. Q* B7 ]7 l. @5 {5 l - ('李春', '数学', 80),
0 G8 z8 d, f- z+ @" _ - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,
; K) a7 l6 Z/ n' P, \3 e - sum(if(Subject='语文',Fraction,0)) as 语文,! V8 {2 n( ?& G
- sum(if(Subject='数学',Fraction,0))as 数学, + r4 B- t8 q l C, L
- sum(if(Subject='英语',Fraction,0))as 英语,
& c( p. d0 R6 R5 b/ f3 R# } - round(AVG(Fraction),2) as 平均分,/ m8 b" i0 z4 t* { d7 _* v8 }
- SUM(Fraction) as 总分1 |4 ^. `3 i6 Z$ W
- from t_score group by name " O$ M) A1 y, D# ?% I% C9 d
- union. B4 C0 E' F* }. I9 |
- select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(. b( {/ |5 ?5 T
- select 'TOTAL' as name,) g+ J) A4 \5 t! L& k6 u$ K- K
- sum(if(Subject='语文',Fraction,0)) as 语文,0 j8 E6 P% y+ e; u* @
- sum(if(Subject='数学',Fraction,0))as 数学, , w4 F# e% w s H) s
- sum(if(Subject='英语',Fraction,0))as 英语,& Q; P" t' f) E
- SUM(Fraction) as 总分0 S( J z) j( I2 c- G$ P9 _* Y- u& `
- from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
% O' u% Z6 P" y7 ?: |* |6 } - sum(case when Subject = '语文' then Fraction end) as Chinese,; c! v' B. W' F- O
- sum(case when Subject = '数学' then Fraction end) as Math,
% x- H, _- o$ m/ k7 e# M - sum(case when Subject = '英语' then Fraction end) as English,/ H1 s! u9 t( O
- sum(fraction)as score
2 m* {; c3 |* j7 k, G: V% a- j1 ~ - from t_score group by name. g" w' }9 [2 E! Q5 W* Z
- UNION ALL
4 L5 P) q! G8 a. ? - select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(# M3 t. m# N- z3 N) F
- select 'TOTAL' as name,3 L! I+ ]+ Y: p5 K3 ]
- sum(case when Subject = '语文' then Fraction end) as Chinese,
. V+ h0 ^* Q, A8 M - sum(case when Subject = '数学' then Fraction end) as Math,: p s. _4 ~' o* b% c$ k# [/ @- ^0 _
- sum(case when Subject = '英语' then Fraction end) as English,
P3 {$ V3 @& P+ a! N - sum(fraction)as score
' e! H4 A% z* j/ q8 |) U0 D - from t_score group by Subject)t
复制代码方法三: with rollup - select * g" f( W) `. V, A! A
- ifnull(name,'TOll') name,
# ~! c8 U9 T7 \. L& Z - sum(if(Subject='语文',Fraction,0)) as 语文,
3 }$ c' {/ D( _& f1 j3 S - sum(if(Subject='英语',Fraction,0)) as 英语,' A7 m0 _: n( x) P3 D
- sum(if(Subject='数学',Fraction,0))as 数学,% w( }/ N7 Z* W* E5 R1 \& J' f
- sum(Fraction) 总分, l7 c# }1 l) |5 G
- from t_score group by name with rollup
复制代码查询结果如下: 1 i2 u( @6 d0 d
' y5 A* s4 y8 w% T3 s* f4 C% ?' H% y
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|