|
|
原始插入数据如下:
6 T4 O/ c$ P( a5 ^% c0 J7 ]/ d要求查询结果如下 :7 G! y, {( N0 J" e' g- v# E
/ G5 X# |: v/ i+ o7 v3 h
* X* m, `# H5 y1 p. e1 Q) w0 ^# a创建数据库、表
% g5 m1 U2 d6 y; d& p- c8 t- create database tests;
) W8 h2 R8 c1 {: A$ P/ c$ I& _ - use tests;
: z8 y5 B: w5 `. w6 j/ c1 u - create table t_score( B. F7 l- Q) C2 v1 C& ^% {
- id int primary key auto_increment,
+ z1 R! s- {) w5 ~" U - name varchar(20) not null, #名字5 D( z1 W% ?3 z
- Subject varchar(10) not null, #科目
% P/ ^9 i/ S) ~1 L2 ^ - Fraction double default 0 #分数9 t. M. i) V" ^8 ^# l" f G
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES7 k) m+ t) r( _# ?, x) Y$ T
- ('王海', '语文', 86),1 s1 h& v. u4 o4 m n. x
- ('王海', '数学', 83),' w9 J. \# J& G+ G
- ('王海', '英语', 93),
' n, Z# |/ b9 Z$ ?8 F - ('陶俊', '语文', 88),
9 N; |% `; V* \ q# W: L; G - ('陶俊', '数学', 84),
' x: L( \$ X5 F+ o* o - ('陶俊', '英语', 94),
, ?* [! w; }: t) j- }7 [ - ('刘可', '语文', 80),
7 O6 ]0 M- j( i( R - ('刘可', '数学', 86),
3 m) j) R) R; P' P - ('刘可', '英语', 88),0 S4 C7 @+ }% F* q
- ('李春', '语文', 89),: ?# B4 l/ I; m
- ('李春', '数学', 80),1 v( ^5 b4 N7 I& s) U9 L
- ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,
5 s& F9 }3 t3 T - sum(if(Subject='语文',Fraction,0)) as 语文, @$ ~2 o" F2 Q+ ~- J
- sum(if(Subject='数学',Fraction,0))as 数学, / d: Q2 k$ f% K& f2 y( L
- sum(if(Subject='英语',Fraction,0))as 英语,* H, }+ O7 @4 l/ y. m
- round(AVG(Fraction),2) as 平均分,4 j- F' P5 k) N6 M' Z2 W
- SUM(Fraction) as 总分: c# ?/ H W& ]: {, L
- from t_score group by name ! g$ Q, |' w; ?0 a/ B
- union
|( P: r3 h" x; I o( ? - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(8 K3 C' ]: A4 z& J/ n
- select 'TOTAL' as name,
0 ]4 U: E+ [ A: K" [ - sum(if(Subject='语文',Fraction,0)) as 语文,( X( U3 _! ?% F" m6 B0 A* a
- sum(if(Subject='数学',Fraction,0))as 数学,
- y. E I$ ?0 D7 { - sum(if(Subject='英语',Fraction,0))as 英语,. O% G' v; ], T8 G% v" w9 e
- SUM(Fraction) as 总分
0 F) O. z5 i5 H7 ?9 k - from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,: E3 t/ C- y6 f" e- g6 P. q
- sum(case when Subject = '语文' then Fraction end) as Chinese,( M0 [' w- D% I. i5 Z, z
- sum(case when Subject = '数学' then Fraction end) as Math,! Z+ O' |7 G( I
- sum(case when Subject = '英语' then Fraction end) as English,/ k# C; B# w# j0 L8 u- r: Y5 T
- sum(fraction)as score
. t. P2 x3 f. G) N2 n - from t_score group by name5 s8 P% D. _0 ]6 d- o3 y5 E
- UNION ALL
4 R c7 u- X9 p - select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(6 q4 e% g8 S- _3 i
- select 'TOTAL' as name,. V8 [) \& g" Y4 r3 ]
- sum(case when Subject = '语文' then Fraction end) as Chinese,
/ X! G/ o3 I6 N9 z s - sum(case when Subject = '数学' then Fraction end) as Math,
4 z, z2 z9 z% l0 t/ x - sum(case when Subject = '英语' then Fraction end) as English,( W: r. e4 Y1 z' o
- sum(fraction)as score
5 Q0 @; L; ?& ], h9 f, ~ - from t_score group by Subject)t
复制代码方法三: with rollup - select
& _6 U7 e. L: H, U - ifnull(name,'TOll') name,: k! M3 L1 J ]4 b o
- sum(if(Subject='语文',Fraction,0)) as 语文,$ L) J6 O R9 D! P, O
- sum(if(Subject='英语',Fraction,0)) as 英语,
- M* F7 [& S& l$ W1 `3 x - sum(if(Subject='数学',Fraction,0))as 数学,
/ q* k+ P$ K/ v7 c8 C* j4 E* \6 ` - sum(Fraction) 总分
# E7 n e" r9 \& p9 n: X9 S - from t_score group by name with rollup
复制代码查询结果如下:
3 E8 B3 m b) I! m6 l0 ~
. E: R r6 Y2 K. M/ @ |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|