|
原始插入数据如下:5 \0 F: C- P, D1 y( x& Q
要求查询结果如下 :
5 d% W! e1 F& t4 c/ y
( \$ A* x$ O0 }9 z% n- D
3 X: c$ y: f1 a) G$ b. O) C* @创建数据库、表: q" F# i5 M ?' T, j& b
- create database tests;$ c* o Q' g s! u8 n5 o6 o! a
- use tests;
$ ` _; t& J# B - create table t_score(; @, N3 Q* V( j/ q5 g4 h
- id int primary key auto_increment,8 M0 Z* L! H$ [! x7 C! y2 _5 B
- name varchar(20) not null, #名字
8 m2 ]# z8 x, ^: V4 v7 `" X - Subject varchar(10) not null, #科目: R. a, S$ k. r/ t0 m
- Fraction double default 0 #分数6 o( G8 Y1 ^* Q
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES- A( T6 V2 p' F3 ?+ m
- ('王海', '语文', 86),0 {% O$ _0 c2 V# h2 S
- ('王海', '数学', 83),; \" E# y5 C- y5 J! C
- ('王海', '英语', 93),
$ A9 x" @- N( ]( ? - ('陶俊', '语文', 88)," U {4 G1 ]5 }& _3 p$ s+ w. }
- ('陶俊', '数学', 84),
/ s4 U7 q8 g R$ q: o# x- [ - ('陶俊', '英语', 94),
% F( q3 z; s$ ` z - ('刘可', '语文', 80),% |! s* W3 C6 w+ \# L) J
- ('刘可', '数学', 86),
: V7 |# g& H* W% s) y - ('刘可', '英语', 88),
6 J8 _- P5 a$ h; r B9 ? }& z' ` - ('李春', '语文', 89),
& L- r( t4 Y, ^4 k8 ]. ^' n - ('李春', '数学', 80),
) V( K! d9 ?% }9 j+ ` - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,
# a3 G% w' C$ e) L* g: r- J1 d - sum(if(Subject='语文',Fraction,0)) as 语文,
, x3 L5 |1 ?- p" B* O - sum(if(Subject='数学',Fraction,0))as 数学, # D m4 P- y1 J8 S& u- h
- sum(if(Subject='英语',Fraction,0))as 英语,
0 l/ _, K: x6 B& I - round(AVG(Fraction),2) as 平均分,0 X. u+ d0 y5 f' [5 J: ^3 _
- SUM(Fraction) as 总分" g# w$ @7 Q9 c
- from t_score group by name
7 }+ z2 F7 X( q - union! V) _- L6 c8 v9 F* @
- select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(
7 O* `* a$ A% ~, @5 ]( e& B& ~ D - select 'TOTAL' as name,8 M- r \. d$ q# g/ d& D% g/ g
- sum(if(Subject='语文',Fraction,0)) as 语文,
- Y& G1 O7 H4 D9 P2 i: L: T3 @ - sum(if(Subject='数学',Fraction,0))as 数学,
' v- A" x' Z% G/ z - sum(if(Subject='英语',Fraction,0))as 英语,
" G2 d O1 n" F& ]3 S - SUM(Fraction) as 总分+ ~8 ]1 W: @9 B, } I8 l1 a
- from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
) m, \4 o2 `$ t1 V - sum(case when Subject = '语文' then Fraction end) as Chinese,
- ?- p7 c8 H: A! P+ y - sum(case when Subject = '数学' then Fraction end) as Math,
9 P9 V( i T+ ?9 ?: _ - sum(case when Subject = '英语' then Fraction end) as English,: | P! E l! }, y1 J6 g0 }
- sum(fraction)as score
$ h7 Z: B! F! i# l7 o - from t_score group by name1 X6 E6 A8 G% \4 m; r
- UNION ALL
/ `+ M9 |, i/ O5 R$ p8 t0 h7 o - select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(' Y! C/ R4 b' v" F/ [- @' I
- select 'TOTAL' as name,
3 o% h2 J3 Q" o J' G- ~ - sum(case when Subject = '语文' then Fraction end) as Chinese,
+ e, y, u: M8 D - sum(case when Subject = '数学' then Fraction end) as Math,- d; b% u" e! C, ^; Q
- sum(case when Subject = '英语' then Fraction end) as English,
* E' `2 q( G2 c) D - sum(fraction)as score7 O( j1 x5 z- G/ f7 n" D4 K" q
- from t_score group by Subject)t
复制代码方法三: with rollup - select # N* S; k: T( n/ M0 j2 {
- ifnull(name,'TOll') name,
6 p% p) w: g# S( B1 B1 ]! i) Y7 a - sum(if(Subject='语文',Fraction,0)) as 语文,
. z5 o R' Z$ O. D" y2 z) v - sum(if(Subject='英语',Fraction,0)) as 英语,
8 G5 @6 _; g. G' A5 @ - sum(if(Subject='数学',Fraction,0))as 数学,) A: p/ _8 x3 o: W3 z
- sum(Fraction) 总分
" U: B5 b; o+ _& {. @# Z/ i r - from t_score group by name with rollup
复制代码查询结果如下: - H$ A- m5 C6 U% G7 |, \
5 J! d; w1 `( P |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|