|
原始插入数据如下:
$ i; U+ V, y8 O3 U, @9 O) X要求查询结果如下 :6 q( Q- J/ M9 Y" `$ a( y
* C' w( ^6 `: e! A9 O2 |; a3 y5 M _& m& P
创建数据库、表
9 m8 w$ J4 h% Y) i# c- create database tests;1 t! m u# w5 w9 P6 D: g
- use tests;
& I# P. E" Q5 @9 B - create table t_score(
; ]/ Q' H/ T& @7 V I- {9 q0 L" q - id int primary key auto_increment,
& ]) W! {% d5 E8 l0 a1 T) A) V3 K - name varchar(20) not null, #名字
4 U- q+ E2 v6 Z - Subject varchar(10) not null, #科目
' T4 y, b$ @ Z& T! j8 M9 ] - Fraction double default 0 #分数9 [: ?8 b2 i. E. y; l
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES1 [8 Y' M. U; @! h! |! C8 N' h
- ('王海', '语文', 86),
; c |, r# n1 V - ('王海', '数学', 83),
% n. s) C8 W" U! T& ` - ('王海', '英语', 93),
1 p1 J! t$ b, Z- f! v& \% n - ('陶俊', '语文', 88),: v% f) N9 w. x$ n' D8 n2 y ~
- ('陶俊', '数学', 84),
3 j- V1 z& U* j - ('陶俊', '英语', 94),
0 ^. z* u( I2 [& X% r0 b4 }8 Y - ('刘可', '语文', 80),
0 [/ J4 E- @# \; _ - ('刘可', '数学', 86),
* ]; u) F3 l# G3 ^" H k1 t - ('刘可', '英语', 88),2 T* ]" C9 P+ {2 E( m# l
- ('李春', '语文', 89),+ `, }( C# h% t( a; o8 v% m
- ('李春', '数学', 80),
' o/ o' U! G/ S1 X$ G' R - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,* Z8 _: U$ s( y" w& T8 _8 t' T: v
- sum(if(Subject='语文',Fraction,0)) as 语文,; d) o0 g4 P2 N4 u
- sum(if(Subject='数学',Fraction,0))as 数学,
& I4 |; Y) e- V9 @: l7 b' p - sum(if(Subject='英语',Fraction,0))as 英语,' r4 x% W9 `4 d( M4 i" [
- round(AVG(Fraction),2) as 平均分,
7 z N H; }3 n! M- @1 s6 m - SUM(Fraction) as 总分
6 M' t9 l# K7 l' f& g - from t_score group by name $ q9 u% M, h1 K$ Z6 f
- union
; [( K0 B& G$ I; e ] - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(& |+ w' _ ~) j- |
- select 'TOTAL' as name,+ K/ U3 k& t9 T0 |; O" u: N
- sum(if(Subject='语文',Fraction,0)) as 语文,9 m4 f' l- r r# e6 {
- sum(if(Subject='数学',Fraction,0))as 数学, # I$ |( e: v3 u& w) |
- sum(if(Subject='英语',Fraction,0))as 英语,
6 n. j% t8 U% _$ l. L - SUM(Fraction) as 总分
3 R$ Y* `# U K0 v% m8 @4 t - from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,. x0 S4 e& j4 D' l0 @1 @9 i
- sum(case when Subject = '语文' then Fraction end) as Chinese,2 m3 Z: `& W# B- Y
- sum(case when Subject = '数学' then Fraction end) as Math,
! l# y9 m. O% N" W - sum(case when Subject = '英语' then Fraction end) as English,* i% Z5 y' y1 g" @9 }
- sum(fraction)as score
. J1 v; H Y) B. L - from t_score group by name3 u3 r- W. m8 k' r- _. Z) O$ W
- UNION ALL2 O+ V% ]- U8 r' t( Y4 C2 o. W. c
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
' }! E0 I' u& R+ o - select 'TOTAL' as name,
* S- ^: n& d5 z. ^- G1 m' }* s - sum(case when Subject = '语文' then Fraction end) as Chinese,( T3 x" ^+ y' [$ l
- sum(case when Subject = '数学' then Fraction end) as Math,8 Z, w: J" Q+ `( h% t0 Z: W `; M
- sum(case when Subject = '英语' then Fraction end) as English,
" K8 @- C0 e4 Q( W% ~9 Y# n - sum(fraction)as score& \# R5 }& ] i1 m
- from t_score group by Subject)t
复制代码方法三: with rollup - select
1 @ [4 c, a V, @; m0 D0 Y - ifnull(name,'TOll') name,7 j5 E! x. e( E3 _5 |
- sum(if(Subject='语文',Fraction,0)) as 语文,
# I2 z. d4 e3 h2 F6 f$ p9 { - sum(if(Subject='英语',Fraction,0)) as 英语,. \4 C3 @8 d* X1 o' B
- sum(if(Subject='数学',Fraction,0))as 数学,& S! M4 W1 i+ Q3 d5 Z
- sum(Fraction) 总分
I2 u6 E# v2 O/ a5 k9 g - from t_score group by name with rollup
复制代码查询结果如下: ( j1 j# D( q0 }1 j
6 r4 L1 q ]6 t a* ]: R! f9 X
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|