|
|
原始插入数据如下:
" }: w4 e' B T1 ^6 P) L% S要求查询结果如下 :1 ?6 p: j" k% V: d7 z3 B
7 S1 ?& W* U% J2 j x
% }9 a* E; f6 q. N% F4 m. @创建数据库、表4 L/ H3 \3 @1 m# F9 B6 `) e
- create database tests;
5 @1 M# D/ H( l8 J* e) C4 i - use tests;
) G: t! e6 w( ^9 a1 \5 _ - create table t_score() n: s4 t7 r2 k1 E5 q& {5 N
- id int primary key auto_increment,
# a0 ~$ }( C1 _3 G - name varchar(20) not null, #名字6 M; p Q! ?& Y7 @/ E$ T+ U+ N
- Subject varchar(10) not null, #科目( {' d1 u4 f4 o% S
- Fraction double default 0 #分数
0 y! z$ y1 K) r# I* ^# Q; n - );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES' e ^% y! ]/ z& Q7 L( ~" X9 C
- ('王海', '语文', 86),7 A8 O- O, h/ F8 V; g) k
- ('王海', '数学', 83),6 i' u! P& i# X+ j; W
- ('王海', '英语', 93),
$ u; B% J5 q. }4 V. d% J - ('陶俊', '语文', 88),
& j1 t: w* C4 |3 Q) C - ('陶俊', '数学', 84),# \2 M+ v) t& U& T
- ('陶俊', '英语', 94), i3 p% V! c# K* M1 Q# w9 D
- ('刘可', '语文', 80),
1 n, \4 P( \& b9 W& p5 c" H9 `4 b - ('刘可', '数学', 86),- D& E4 j1 k3 u) ~( G
- ('刘可', '英语', 88),+ |( [, e! f0 v) H% W
- ('李春', '语文', 89),
! z1 S" ]; ^+ u& ~ - ('李春', '数学', 80),
( B3 j6 q9 f+ ~, n$ ` - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,
4 y( B9 z! c( m8 \ - sum(if(Subject='语文',Fraction,0)) as 语文,
& f4 y e9 e# z* G - sum(if(Subject='数学',Fraction,0))as 数学, , J& u; a, @- l( r5 T
- sum(if(Subject='英语',Fraction,0))as 英语,8 j* x& ` q" {/ [) m4 |
- round(AVG(Fraction),2) as 平均分,
. H' P; ^8 W- U. Y: N - SUM(Fraction) as 总分
- t B2 u, C8 d- Q8 |+ Q5 u' L - from t_score group by name 0 }( g- N6 f. w2 W) R5 [% l
- union( l/ W9 t0 S! ~/ y
- select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(
1 ^% S2 G* i- U) A9 e' T' [7 ^ - select 'TOTAL' as name,: c- u+ q2 a9 V6 R. ^+ U
- sum(if(Subject='语文',Fraction,0)) as 语文,: g" z8 Q) r# L X) y( I; W; G, \
- sum(if(Subject='数学',Fraction,0))as 数学,
y4 ]9 Q: Q" V/ T! ~7 Y& i - sum(if(Subject='英语',Fraction,0))as 英语," E3 P( d( U1 e. ~$ a* a9 y
- SUM(Fraction) as 总分! }( Y: H) K' J; }9 ~6 q& i
- from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
/ J$ H* x3 L& _* R - sum(case when Subject = '语文' then Fraction end) as Chinese,
- W2 \" f8 A0 n9 g6 v - sum(case when Subject = '数学' then Fraction end) as Math,
" ~! k/ X1 x2 M( v0 o- { - sum(case when Subject = '英语' then Fraction end) as English,
Z' C) |: q8 G3 K - sum(fraction)as score% M. B) t) I7 t0 t/ S
- from t_score group by name
6 M: c& S' \3 r5 h4 }' \% M+ j - UNION ALL" b& V1 S& J- m
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
9 U( Q0 A3 K7 L, \& G/ u; N - select 'TOTAL' as name,
# V% o. \0 x: a# n' O! I - sum(case when Subject = '语文' then Fraction end) as Chinese,
; V5 @3 v! m2 t" y3 v4 q - sum(case when Subject = '数学' then Fraction end) as Math,. I$ d' b( r9 v J
- sum(case when Subject = '英语' then Fraction end) as English,
. A0 {+ ^% Y$ }+ K p6 v - sum(fraction)as score1 D: e4 V! U2 u0 Z
- from t_score group by Subject)t
复制代码方法三: with rollup - select 3 [- F! q! M- ?. G
- ifnull(name,'TOll') name,
( y+ f8 ^: U& Z7 J6 D* l - sum(if(Subject='语文',Fraction,0)) as 语文," l j4 f4 V' C8 d: S' P7 {
- sum(if(Subject='英语',Fraction,0)) as 英语,! O) b( Z8 b% s T9 l
- sum(if(Subject='数学',Fraction,0))as 数学,8 w$ O' t! ^8 U& x- K8 J
- sum(Fraction) 总分; j. X" E ^; w( Z" W
- from t_score group by name with rollup
复制代码查询结果如下: ' c3 y1 T( t* h( \+ T( j7 H
0 ?. v) N* t9 s |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|