|
|
原始插入数据如下:
( i. N7 b! T7 _) m4 t" N要求查询结果如下 :; y4 V0 A1 o' n' U% @! y
3 }9 x; v( N7 @' ~/ N" q: j2 \
# P/ n M( U- h4 X( V1 i' y/ H/ P创建数据库、表+ p1 C# i6 P5 @+ f5 w6 u" F- E
- create database tests;
7 m% j" g" T$ X$ I: p9 r% T7 V# z - use tests;
" V- r% u X8 }- _% J( j - create table t_score(
' Q6 ~' p6 o: [8 S! I - id int primary key auto_increment,% f! S+ Y k" p0 i% r: Y. |
- name varchar(20) not null, #名字
9 \/ _6 t' g7 ]8 x0 L- U - Subject varchar(10) not null, #科目
: Z" i% x e* _4 n% r' x% t - Fraction double default 0 #分数/ \2 Y3 d* o# V% Z' y+ K* V
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
! v- P" w2 {1 x4 S. M - ('王海', '语文', 86),7 l- @* ~! d! U; \- o/ y7 _
- ('王海', '数学', 83),
' J$ }" e C% f1 e$ _7 U - ('王海', '英语', 93), V1 K4 S* C1 E
- ('陶俊', '语文', 88),6 P2 v1 F i/ B1 f, Z* p
- ('陶俊', '数学', 84),& D& L' Y! M# m& y0 h' @# P
- ('陶俊', '英语', 94),
( c! C% M; M( z: z6 m* p9 H - ('刘可', '语文', 80),
! L" q: h. ~' F3 B# s0 h - ('刘可', '数学', 86),
6 S% w9 U& e) Q - ('刘可', '英语', 88),, _" J. q/ L, w" A2 L2 v* ~; p. V
- ('李春', '语文', 89),3 `4 h5 B# W* Z: w- n( [5 h: q
- ('李春', '数学', 80),
5 o; S8 u; n. C0 ?7 O - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,
[9 B1 x9 q* H - sum(if(Subject='语文',Fraction,0)) as 语文,
7 a4 ~4 _, n( O" s4 W3 H - sum(if(Subject='数学',Fraction,0))as 数学, : g/ Z& b. @# e" a1 M* L
- sum(if(Subject='英语',Fraction,0))as 英语,) j, ]8 B* F3 a2 m
- round(AVG(Fraction),2) as 平均分,% J4 N* V. I% w1 \/ i7 u" b
- SUM(Fraction) as 总分
7 g) T9 f) a4 ^( G" r - from t_score group by name
' a, Q- c9 {# A - union% |; p1 k+ b) m" r$ x; u* |
- select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(* ^' h0 r- H5 F% t% ^! [. w
- select 'TOTAL' as name,) |3 O1 O- s1 e \) r
- sum(if(Subject='语文',Fraction,0)) as 语文,
! a7 p' e: H! |1 W9 U - sum(if(Subject='数学',Fraction,0))as 数学,
! v4 a9 F0 y: g* W - sum(if(Subject='英语',Fraction,0))as 英语,+ w$ c, i @0 @; P
- SUM(Fraction) as 总分+ T A+ H( W8 h' b5 V% `% p
- from t_score group by Subject )t
复制代码方式二:使用case - select name as Name," {% m7 H- K8 V$ s# w
- sum(case when Subject = '语文' then Fraction end) as Chinese,
% C; y5 f8 f: I* I+ v+ j" d/ o4 I - sum(case when Subject = '数学' then Fraction end) as Math,
/ ?! _" p+ t( y1 r M6 ? - sum(case when Subject = '英语' then Fraction end) as English,! S) g1 m9 _; C0 }% a# {2 J
- sum(fraction)as score
# X! e5 ?9 o3 ?& r9 z+ D - from t_score group by name/ x3 _7 y: E. T( z7 p
- UNION ALL
+ i, q3 K( P. u# C4 i7 \. X+ x - select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(/ i2 @1 V5 {% R3 ?& X
- select 'TOTAL' as name,9 j+ M' w. y1 u; d
- sum(case when Subject = '语文' then Fraction end) as Chinese,# i( Y5 G( Z% k
- sum(case when Subject = '数学' then Fraction end) as Math,# G, D5 S3 T5 g7 L
- sum(case when Subject = '英语' then Fraction end) as English,: S1 W7 `+ [5 H; J9 R
- sum(fraction)as score
4 R, w6 ~0 z8 w! \ - from t_score group by Subject)t
复制代码方法三: with rollup - select ' |7 U) q C0 |6 R3 z1 S; w& y
- ifnull(name,'TOll') name,. p1 h! U3 |+ @+ v) h9 C
- sum(if(Subject='语文',Fraction,0)) as 语文," j& |, Q# K0 V7 M! A' _; E, S
- sum(if(Subject='英语',Fraction,0)) as 英语,
I* k2 F0 B' M" U" i - sum(if(Subject='数学',Fraction,0))as 数学,& s; k0 X' X* N) I4 Z+ w: i
- sum(Fraction) 总分
" e- ?7 X: L6 j* _- I - from t_score group by name with rollup
复制代码查询结果如下: - N9 T- z2 t! I5 t, O8 `" S
* ^) N! Y! J/ c
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|