|
|
原始插入数据如下:% d9 l0 k/ L% a6 n+ h7 H- q9 m
要求查询结果如下 :
# P6 q' ]9 @1 r
1 E7 u/ c) k% s t% b; a( ~/ c' S6 X6 W! v; i
创建数据库、表. y% F# w* y& \3 s: U: s
- create database tests;9 d8 H& y7 S# [; O2 v, f) c3 ^
- use tests;
# r2 I$ s( T2 S) E" d, n - create table t_score(* f0 a& P; q5 i4 L5 L
- id int primary key auto_increment,
( ~2 D& q& ^/ U - name varchar(20) not null, #名字! w! z3 s' m5 U' v; I7 V
- Subject varchar(10) not null, #科目5 N$ b+ N! w: x( G, n- P% L8 z& v0 Z
- Fraction double default 0 #分数 u3 W; g' b( j) f
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
9 Y/ Z$ e+ F: P0 ?* l - ('王海', '语文', 86),
/ a1 U& M4 n+ g. `. r - ('王海', '数学', 83),7 X, O1 G: p+ X( ^. k; T
- ('王海', '英语', 93),
0 S" B( A9 L8 [2 w1 y. b) m - ('陶俊', '语文', 88),$ y- ?& {/ O5 a0 Q
- ('陶俊', '数学', 84),
# o! L9 m; u5 a/ E# P - ('陶俊', '英语', 94),
4 \& [9 I( y8 g! f- H8 ?+ O9 ]0 \ - ('刘可', '语文', 80),6 [! V A$ e g8 ^5 s$ {* `
- ('刘可', '数学', 86),$ A/ O0 g+ X7 H9 a" ?3 i; z& l
- ('刘可', '英语', 88),6 o8 i! w; R+ m) e! W/ S3 G4 h' ]
- ('李春', '语文', 89),
$ B$ c) v' `, R# S( H - ('李春', '数学', 80),+ w4 u: o4 X! |% f
- ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,
$ n% c/ V2 R! @ - sum(if(Subject='语文',Fraction,0)) as 语文,6 p( d( G8 S8 I( _* ]( ?# x
- sum(if(Subject='数学',Fraction,0))as 数学, 8 N8 ?0 Q0 {. W' `# Z( v: q4 Z
- sum(if(Subject='英语',Fraction,0))as 英语,
9 r7 Y7 Z2 U, R5 ~0 D - round(AVG(Fraction),2) as 平均分,
& z" g1 D2 B: d* A; E - SUM(Fraction) as 总分1 i* ^& g G* t5 j5 L6 u) L
- from t_score group by name
+ Y8 l- F, i! w! B& g, d- {0 @2 C/ m - union3 H4 v6 P( H- b6 T
- select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(# X; @) {" c+ t* g, i3 r
- select 'TOTAL' as name,$ W9 A( @ [4 r
- sum(if(Subject='语文',Fraction,0)) as 语文," a$ K J6 e, S2 |; R& l
- sum(if(Subject='数学',Fraction,0))as 数学, 5 ?- i6 Z2 _$ d {: W. ^
- sum(if(Subject='英语',Fraction,0))as 英语,0 k8 W1 i% S4 ~1 S
- SUM(Fraction) as 总分; v3 d% S9 x8 a G, Y. | Q
- from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,% [, N. l! g& a1 Z: {1 V" Y
- sum(case when Subject = '语文' then Fraction end) as Chinese,) |2 _. z0 B9 \; }; K
- sum(case when Subject = '数学' then Fraction end) as Math,
: u1 F" ^, t" [8 o' g6 x - sum(case when Subject = '英语' then Fraction end) as English,
0 r) `! ]! P h - sum(fraction)as score
|( H6 ]! u& V - from t_score group by name9 N8 f, i- o: h3 z
- UNION ALL. T2 S5 h/ Y2 z. Z; Q; N& ?$ F
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
{ w/ I, l; |) f% b) H - select 'TOTAL' as name,
) J6 `5 P: z! T/ P$ x - sum(case when Subject = '语文' then Fraction end) as Chinese, _: ?9 B& i; M- @3 Y- I q
- sum(case when Subject = '数学' then Fraction end) as Math,
/ s; J; Y' ?9 M/ G* ~, h) I2 z - sum(case when Subject = '英语' then Fraction end) as English,
! a* a/ {7 o6 G" ?! h* a, A4 K - sum(fraction)as score
% H) y$ K% F# H; N1 S! Z, D - from t_score group by Subject)t
复制代码方法三: with rollup - select ' o3 X7 z6 Y/ W$ f* q
- ifnull(name,'TOll') name,
/ Y! `. O& U% \2 B2 v - sum(if(Subject='语文',Fraction,0)) as 语文,* N. K* C) ~5 F
- sum(if(Subject='英语',Fraction,0)) as 英语,
; H a$ ?9 F6 W( q4 V; k& H# k - sum(if(Subject='数学',Fraction,0))as 数学,) H$ e) k X9 l
- sum(Fraction) 总分
7 i' b1 A) ?) H# A" ?' B+ F$ P - from t_score group by name with rollup
复制代码查询结果如下: $ v* [3 e! b2 [# A* x! F! ]+ l
4 Y4 t% C( i5 _$ ?% D' y
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|