|
|
原始插入数据如下:
3 {, H4 g9 `1 S' N要求查询结果如下 :1 q# W* \3 H7 C; i! d
/ G3 K/ y" A/ B5 E ]6 j5 j; j" @
创建数据库、表
! u" R0 T9 y+ d" h1 j1 Y; z- create database tests;+ k! o2 n& o& C4 w
- use tests;
" s: l8 {1 |" }7 J3 X2 d% z - create table t_score(& A4 l# y2 p. m, C. G' l( M! L1 ~; y
- id int primary key auto_increment,
7 s7 ~4 O$ \. {- X - name varchar(20) not null, #名字4 e" | s- Q% Y! W5 O+ Y, {. P& M- w" k
- Subject varchar(10) not null, #科目8 `( ?4 Y2 Y& k/ W% K2 l
- Fraction double default 0 #分数( Q( B0 \0 j* D" S4 Q
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
& p0 H5 _( j% F3 w - ('王海', '语文', 86),
6 [/ v+ d+ {% w, [3 T$ Q) x - ('王海', '数学', 83),
) X# h/ D+ Q6 x, o/ T* C3 D C% ] - ('王海', '英语', 93),% ?' ]+ L. W& L4 a/ s$ ?- Q# C$ x8 f8 l
- ('陶俊', '语文', 88),4 e! Y8 w3 N m' }
- ('陶俊', '数学', 84),9 g7 X4 \: g2 Q
- ('陶俊', '英语', 94),/ E9 T) H. d1 v) U: _$ Z
- ('刘可', '语文', 80),/ Q# }) F9 A5 [7 [
- ('刘可', '数学', 86),; z5 _1 N# m9 | r) A
- ('刘可', '英语', 88),# {! s. o) ^: [1 h- K2 R6 T
- ('李春', '语文', 89),
( h' u! ]0 J4 N) s# K* ?! V4 T' Y - ('李春', '数学', 80),
! g5 _3 ^4 J$ `+ j - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,5 b- E3 i( ]+ ^ \& n7 u1 z1 @
- sum(if(Subject='语文',Fraction,0)) as 语文,
, l2 N$ |8 F$ O) P+ V8 B - sum(if(Subject='数学',Fraction,0))as 数学,
- ]( m5 S( b2 {0 J0 L) ^ - sum(if(Subject='英语',Fraction,0))as 英语,
7 l7 `" r# h, H+ T: o/ l7 B - round(AVG(Fraction),2) as 平均分,
Z7 ?; k* g) ^2 k# y7 e - SUM(Fraction) as 总分( a& J$ Q) { k U. |5 z
- from t_score group by name
2 z1 `- F/ S( Z( R - union
& F6 o( l2 {% j" w0 Y7 r; e! h; @ q - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(' E( k* \' x. u7 J* h6 z$ @
- select 'TOTAL' as name,+ C" Z( i9 c9 g. N# {
- sum(if(Subject='语文',Fraction,0)) as 语文,( `% u8 q. M2 H4 w' Q/ z
- sum(if(Subject='数学',Fraction,0))as 数学,
7 T7 K& Q5 [7 Z. Q! {: j0 t - sum(if(Subject='英语',Fraction,0))as 英语,
; z/ C1 D9 H! \7 ` Z - SUM(Fraction) as 总分
}# L W+ N$ b - from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
- w, T" S2 Z% u& j7 W' s! i - sum(case when Subject = '语文' then Fraction end) as Chinese,
4 ~% V7 O3 F0 |& G2 ~8 O+ [1 [ - sum(case when Subject = '数学' then Fraction end) as Math,
$ I- V i8 w3 w; Y. Q+ T6 G - sum(case when Subject = '英语' then Fraction end) as English,* U" `; x- K3 d
- sum(fraction)as score5 O _+ L1 z, L; y5 u( n# p! N2 C
- from t_score group by name# k* O, I5 T$ r
- UNION ALL( [6 W: w/ h. B7 ~
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(. E9 K- N. ~$ t# P5 G. B$ l
- select 'TOTAL' as name,. I2 G+ r' E% e/ V8 R- T) O
- sum(case when Subject = '语文' then Fraction end) as Chinese,
* w$ h8 O1 E. z8 }# ?0 l - sum(case when Subject = '数学' then Fraction end) as Math,' O3 @0 c" e; T% P) B
- sum(case when Subject = '英语' then Fraction end) as English,
8 A; m" c8 `; g: Y5 R6 c" |' u* K* i - sum(fraction)as score
J& L: S0 J/ T% X; T% r v- S+ \ - from t_score group by Subject)t
复制代码方法三: with rollup - select
Z$ M1 g$ w# t - ifnull(name,'TOll') name,
3 [. k x: Q# k5 P( N' h - sum(if(Subject='语文',Fraction,0)) as 语文,
( t6 `( H& p, {1 g/ ] - sum(if(Subject='英语',Fraction,0)) as 英语,* ]+ z. ?: h$ g, F( H
- sum(if(Subject='数学',Fraction,0))as 数学,
' d1 a; X4 W6 S - sum(Fraction) 总分/ w& v5 d; I, X! V$ i
- from t_score group by name with rollup
复制代码查询结果如下:
4 P3 M; }. e8 s0 B8 w; k* n
; E6 z- Y7 E H1 t7 @ { |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|