|
原始插入数据如下:
6 ?$ V$ H$ o, J要求查询结果如下 :
4 E8 e- S. E3 u( F- R8 _* Q. f2 g* S$ u3 g8 A& U* w
3 i% B; O* ] J3 L( i
创建数据库、表/ k, U! L7 t' I/ v3 W: c: X
- create database tests;
+ P* [ [, L/ ]$ T, M7 b - use tests;
5 s' l9 ^' f: V8 A! a. p - create table t_score( X6 F& g f0 | P, F* I
- id int primary key auto_increment,
/ h& U5 L0 L1 n6 e - name varchar(20) not null, #名字
5 g/ u0 [* t7 V& J - Subject varchar(10) not null, #科目! x; b* z& V8 ^9 J
- Fraction double default 0 #分数) l" z& h. @+ _( l) I& D, \
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
9 m; o) J e+ ]3 Z - ('王海', '语文', 86),$ n7 c( y0 h* q- y
- ('王海', '数学', 83),/ h0 Q" }9 e! w3 V/ `- }
- ('王海', '英语', 93),
4 ]( u2 ~7 [, I; _$ W! i+ S1 J/ l - ('陶俊', '语文', 88),
/ F9 J: r) G! @ - ('陶俊', '数学', 84),5 t7 _5 d( C8 f. z" B
- ('陶俊', '英语', 94),! y {# Q( W: `; n: Z: `) Y* L
- ('刘可', '语文', 80),
@& }' x( E( c. e - ('刘可', '数学', 86),8 i4 L( B* B# h7 R6 u1 Y9 a
- ('刘可', '英语', 88),
; g# m# ?7 T" p: v - ('李春', '语文', 89),
* k: n! }( l$ E% G - ('李春', '数学', 80),- E- x0 G1 T" c0 L1 `
- ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,: ^- X+ c& ^$ t2 W. q/ k* w9 i, A, `2 o
- sum(if(Subject='语文',Fraction,0)) as 语文,1 E; q$ t& @) b$ L
- sum(if(Subject='数学',Fraction,0))as 数学,
8 i1 G4 d3 I3 Q2 x! J6 X - sum(if(Subject='英语',Fraction,0))as 英语,
% n8 P& g3 A! H4 J - round(AVG(Fraction),2) as 平均分,
' u$ H" f; y2 Z9 }+ J7 ], x - SUM(Fraction) as 总分
4 k. y6 ?6 O( a+ h. |0 n) C4 g7 B, a - from t_score group by name A6 e& P l7 u! f
- union
2 R& X5 m5 ] j9 m8 n( w3 B - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(
& x5 \( `+ |( l - select 'TOTAL' as name,0 k+ B" r C- {! s2 g! R
- sum(if(Subject='语文',Fraction,0)) as 语文,
3 }2 \6 ~6 n) l$ n! S! C - sum(if(Subject='数学',Fraction,0))as 数学,
$ J. r0 R0 S, _ - sum(if(Subject='英语',Fraction,0))as 英语," a1 m4 E, E: m+ L$ F2 w" Z4 E0 ]
- SUM(Fraction) as 总分4 ?: F' a7 z" {9 B A9 r' G% ?
- from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,6 s3 V7 i& X. g, o" y v
- sum(case when Subject = '语文' then Fraction end) as Chinese,
2 [! E" q; O: @+ M+ V& x/ P - sum(case when Subject = '数学' then Fraction end) as Math,
/ i. ^* h. `4 [. X( } - sum(case when Subject = '英语' then Fraction end) as English,
+ w3 E, M& x! n4 j" k& e, G - sum(fraction)as score
$ G: n7 U& R& e8 Z2 c - from t_score group by name
) V% S+ |, q3 |1 Z7 w - UNION ALL
$ D3 g- {7 R w0 d( d( N' G5 X - select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(. r, V) n! _$ d0 j5 ?0 s
- select 'TOTAL' as name,9 _. B" |2 p6 Q4 W
- sum(case when Subject = '语文' then Fraction end) as Chinese,
" ~: x, F* o: R - sum(case when Subject = '数学' then Fraction end) as Math,
5 ^9 v1 w9 R _, B3 f# @- o - sum(case when Subject = '英语' then Fraction end) as English,& m4 J. \; q* c3 p7 ]& i* @
- sum(fraction)as score
6 l8 |/ T; _5 Y: E% i5 M* W - from t_score group by Subject)t
复制代码方法三: with rollup - select 3 S" T; ~8 c& U7 z9 \7 N
- ifnull(name,'TOll') name,
s/ J$ K# T) J7 t - sum(if(Subject='语文',Fraction,0)) as 语文,6 {- h0 v* k7 v- W( A( g }' r
- sum(if(Subject='英语',Fraction,0)) as 英语,$ g) p# s9 ]8 `! d
- sum(if(Subject='数学',Fraction,0))as 数学,, y* p! P5 L5 o( M8 }+ V
- sum(Fraction) 总分
6 R( [& t0 X4 e0 a0 l8 {. E. q - from t_score group by name with rollup
复制代码查询结果如下:
+ X4 e. A+ ]4 E" p& t, T$ s
2 J+ n2 T I6 b: g% i |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|