|
|
原始插入数据如下:8 o5 f: B$ t _8 _- s# R
要求查询结果如下 :
1 e' i5 u4 \, f% a; w9 Z
: ]7 c* J5 k* z
" M% G7 R" F! s/ y, a6 K/ [6 W! y创建数据库、表+ W p9 ^: t8 r# B. M5 K
- create database tests;
$ u& o3 S% c: i2 z: y* \+ Y% j - use tests;: Q& Y4 @- O. c+ e# T
- create table t_score(
4 P- V( @7 b- b+ O - id int primary key auto_increment,) s; [4 h0 C4 Q- C
- name varchar(20) not null, #名字# Y' a; i7 G: G# S
- Subject varchar(10) not null, #科目
( ?* l+ Q, r; U/ x" V* O. t - Fraction double default 0 #分数
3 y4 [/ K9 y0 Y' A - );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
0 H" S* G, c+ o5 k3 V - ('王海', '语文', 86),9 _' V, ?$ s7 D7 @5 _' q
- ('王海', '数学', 83),
4 n' K5 N0 ?" A# c - ('王海', '英语', 93), D" \# W! P, G& R# w/ s1 l) G
- ('陶俊', '语文', 88),
: j5 h( W8 X% g; G - ('陶俊', '数学', 84),
. o2 y3 D$ l2 v0 ?. Y0 s" g! Z - ('陶俊', '英语', 94),
( J* M, t- x( e0 Z) _ - ('刘可', '语文', 80),
# N0 v/ F4 R8 B5 S% H F/ p - ('刘可', '数学', 86),) X0 i- |+ ]( v {
- ('刘可', '英语', 88),
- L! C$ I% T b" A9 r$ ~* ]9 k. L - ('李春', '语文', 89),
$ G: ^' @9 R, D% B* Z: Q. i% e - ('李春', '数学', 80),
5 @2 T: p) S) P2 q0 W8 u. n s - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,
$ c+ j2 I7 b5 F2 @ F - sum(if(Subject='语文',Fraction,0)) as 语文,
4 m9 W7 @+ C& U: @% S - sum(if(Subject='数学',Fraction,0))as 数学,
z( k. ]: } y) s/ q$ |( A4 u5 T - sum(if(Subject='英语',Fraction,0))as 英语,
8 t! |1 l3 N: }6 r - round(AVG(Fraction),2) as 平均分,5 U& t. G- u! S' D9 W
- SUM(Fraction) as 总分 k0 p: Q& K ?+ B
- from t_score group by name
$ P N$ G! Y1 O* f" E1 L9 k9 J& m; z - union' b( u s) s, k3 Y0 E8 I8 U, H8 `
- select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(
- B5 t. l5 }* d' @ - select 'TOTAL' as name,- g4 ]2 [5 T# i/ G T) }
- sum(if(Subject='语文',Fraction,0)) as 语文,8 E! _9 e, p3 d5 |# V
- sum(if(Subject='数学',Fraction,0))as 数学, , W* {4 L* E( B P6 Q9 r' ?+ H5 g
- sum(if(Subject='英语',Fraction,0))as 英语,
6 b2 N( C6 P& N/ T) m- x& ? - SUM(Fraction) as 总分
5 c2 w0 B/ \& e: {/ Z$ Y5 K0 @ - from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
0 X6 `. Z2 V! t5 D/ G2 a9 ~5 t - sum(case when Subject = '语文' then Fraction end) as Chinese,* b& J% h$ }. C0 X3 @
- sum(case when Subject = '数学' then Fraction end) as Math,
( O0 k& i, L4 ]- _2 C - sum(case when Subject = '英语' then Fraction end) as English,
5 a$ Z, ~" }% s( ]+ O% G- f* N# D& h4 y - sum(fraction)as score/ o# `: v, g; ]- x2 J
- from t_score group by name& i B) B, D# b0 z- G6 j1 j# w0 b A+ d
- UNION ALL
/ D" E$ j1 y7 n$ w - select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
: P7 _" L3 o' p' W+ F7 ` - select 'TOTAL' as name,
8 E6 e4 r# C6 R2 A( O - sum(case when Subject = '语文' then Fraction end) as Chinese,
: Y3 e, Y: Z. E+ l - sum(case when Subject = '数学' then Fraction end) as Math,9 \# j1 I; v' e2 I s8 }8 M1 ~, Q
- sum(case when Subject = '英语' then Fraction end) as English,3 n# z. g$ b! r: K- r% J, A
- sum(fraction)as score: w. C7 e- h4 s
- from t_score group by Subject)t
复制代码方法三: with rollup - select
% \/ ]2 d% o/ c. ?% W! _% K; B - ifnull(name,'TOll') name,; m: W2 U* X1 m8 j `; M( t9 n8 R
- sum(if(Subject='语文',Fraction,0)) as 语文,$ \7 [4 e `7 U- X
- sum(if(Subject='英语',Fraction,0)) as 英语," b8 z5 r; z( S& n+ |, @
- sum(if(Subject='数学',Fraction,0))as 数学,
& R+ x2 p: ^7 d$ l - sum(Fraction) 总分1 v& D# W' U0 t' {% G
- from t_score group by name with rollup
复制代码查询结果如下:
/ |' ?6 x+ r: M: B3 {' C- |! M! ]' \; D' U5 o: y( C. Z
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|