|
|
原始插入数据如下:
: a) h# \! e: i) [6 B/ j9 P要求查询结果如下 :
3 J) g$ C) f1 E4 K" S- V @: g* ?8 e3 [% J2 ^. I; N& d5 l! W* w
$ \! c1 D$ e" ]: \7 l9 C" z创建数据库、表! C ~+ x9 f- V0 K8 P0 Q6 `) @
- create database tests;% m3 h8 ?0 @% i
- use tests;- b- G! r- X, G8 j+ R2 ]1 z
- create table t_score(
' t8 M. [( k; E) H3 w+ K - id int primary key auto_increment,7 D( E4 ~9 G" }) H
- name varchar(20) not null, #名字2 S6 \+ O5 f! j0 X' P' p4 x; H2 r
- Subject varchar(10) not null, #科目
" K+ s. r' C' q5 m - Fraction double default 0 #分数0 O" R+ i1 S( u6 }% t
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
' x( F0 ]4 c/ E% ]" t5 r' h9 y - ('王海', '语文', 86),
: H. r: i8 W8 t - ('王海', '数学', 83),, _1 l5 [" m% D9 X1 x
- ('王海', '英语', 93),$ X8 @* @, ~, L; j$ Q5 D
- ('陶俊', '语文', 88),, [% M a5 g5 g# J `1 \) v; X
- ('陶俊', '数学', 84),
8 u0 m$ t& F, M - ('陶俊', '英语', 94),( D" Y- m3 F( @" D( W' [
- ('刘可', '语文', 80),8 g4 l* w0 \( m5 K! G
- ('刘可', '数学', 86),
+ ^6 u" e0 I- r - ('刘可', '英语', 88),9 i4 [% @! x5 Y) t. y% Z* i2 [0 ~
- ('李春', '语文', 89),
2 |. U' }, v* Y" P - ('李春', '数学', 80),
# K y; ]5 v4 N. | - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,1 {! w3 h" F; p% p
- sum(if(Subject='语文',Fraction,0)) as 语文,
- ^: c0 m `9 M1 I - sum(if(Subject='数学',Fraction,0))as 数学, - J/ Y& V+ Z* u$ I4 }5 t
- sum(if(Subject='英语',Fraction,0))as 英语,6 V* w! j( K3 t( @( R$ N; r
- round(AVG(Fraction),2) as 平均分,
u9 l" { C2 h1 p: O7 m7 ? - SUM(Fraction) as 总分. T8 k8 c5 `1 w. u3 B0 D+ \
- from t_score group by name
& x# U. U. ~; S( E - union4 ?" R8 } C+ ?0 c' B$ g
- select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(
& B R' T. J7 `( a( Z, Q+ e" s+ j - select 'TOTAL' as name,
e, S" k. L. `4 b: V% h c3 C - sum(if(Subject='语文',Fraction,0)) as 语文,
9 o5 ]( t# ~/ A4 Q1 p - sum(if(Subject='数学',Fraction,0))as 数学, : l% s$ S" Z4 b1 ?5 K- p
- sum(if(Subject='英语',Fraction,0))as 英语,
& g" X: P+ E: B Z$ H& m& F" M% e - SUM(Fraction) as 总分
6 p w+ }& B* y" W) u/ `2 g% ] - from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
$ \# w0 v2 F' b2 \ - sum(case when Subject = '语文' then Fraction end) as Chinese,
/ H1 J1 ?" s* y; n' z7 ^! z: d - sum(case when Subject = '数学' then Fraction end) as Math,
) A9 t0 o# H3 ?" o - sum(case when Subject = '英语' then Fraction end) as English,
% W# I ~9 r4 R, P- N& |- l' ^ - sum(fraction)as score
2 l- m3 K4 I8 p! Q: x. Z- ? - from t_score group by name
# U* O" c4 y* Z- f$ s3 d - UNION ALL$ E `5 c+ M. I
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(- J. B: e" ]3 a! g/ ^. ^. k6 P6 F
- select 'TOTAL' as name,
q6 X4 s# w2 n4 z. r1 L- ~) \+ X4 V - sum(case when Subject = '语文' then Fraction end) as Chinese,' _2 U3 f" @8 y" J
- sum(case when Subject = '数学' then Fraction end) as Math,3 H0 s6 \4 H% R
- sum(case when Subject = '英语' then Fraction end) as English,4 V0 N/ n- H1 N* d
- sum(fraction)as score+ n" P. M: I9 l* I+ v
- from t_score group by Subject)t
复制代码方法三: with rollup - select 6 x& V/ Y- u* P" |, y j
- ifnull(name,'TOll') name,
+ t+ b$ y& ~- X8 Y$ Q; u - sum(if(Subject='语文',Fraction,0)) as 语文,
( O) F, r" X1 j: e# k' Q - sum(if(Subject='英语',Fraction,0)) as 英语,8 y9 ~& Y# h2 m# T
- sum(if(Subject='数学',Fraction,0))as 数学,
5 I* F5 H. k: `8 i1 p4 ?0 B - sum(Fraction) 总分
( I5 _7 n! O2 x; |4 c D2 D - from t_score group by name with rollup
复制代码查询结果如下:
5 N) s; U- H- i0 l! w
# F) [7 m4 m( N# }% x# F: u5 C! | |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|