|
|
原始插入数据如下:
# b/ Y4 g0 S: [6 B1 Y* I& o# |要求查询结果如下 :$ s. Y) m& |+ d0 j! U, J
S5 Z0 z6 c: f6 p
5 @) z) Y& E l: n+ J创建数据库、表
" B8 G. W6 N. ~! o% B- create database tests;
O9 w+ Q7 Z, t - use tests;$ K( I. t+ M5 a+ F$ f
- create table t_score(
- I9 V. r+ M% B; q2 r. _8 }3 y - id int primary key auto_increment,
6 Z/ _7 y1 D) o$ o - name varchar(20) not null, #名字
; J8 I( A: H) H8 [4 |9 r; N3 o - Subject varchar(10) not null, #科目" `. h0 C0 s5 [4 V# [
- Fraction double default 0 #分数0 O8 b, m! A# E, _
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES u/ l( p* E7 ^1 n/ D
- ('王海', '语文', 86),- i. m- B) q' l2 w* n0 P( U2 g" d
- ('王海', '数学', 83),. l/ v) ^! V1 K' V2 k6 w4 _
- ('王海', '英语', 93),
$ f9 o, d" L% x3 _9 P$ s - ('陶俊', '语文', 88),6 i* ^3 r$ u+ p: e0 H/ `. D. O
- ('陶俊', '数学', 84),
1 S; K$ G, ~" U: y ` - ('陶俊', '英语', 94),
+ j% r( v0 \7 l$ n4 v w7 o9 S7 h/ m - ('刘可', '语文', 80),, s* F6 |) n) Q% [8 N0 [) z
- ('刘可', '数学', 86),
" @0 H1 H) T) d) {6 ] - ('刘可', '英语', 88),
& j5 w$ d: q3 D' a - ('李春', '语文', 89),
" y [9 x7 \; Q - ('李春', '数学', 80),
; Z; N2 g* @& r/ t9 t! D) g - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,
2 I/ m' x0 u, ^2 J" Z5 y - sum(if(Subject='语文',Fraction,0)) as 语文,( j' k0 l+ l* v p- q5 e+ O4 q
- sum(if(Subject='数学',Fraction,0))as 数学,
# n- T+ A9 M8 ]; O1 _# O - sum(if(Subject='英语',Fraction,0))as 英语,
" a2 ~# j4 }( p) V - round(AVG(Fraction),2) as 平均分,* o) a$ a% h, k% ^1 T; h
- SUM(Fraction) as 总分* H* _% _) v4 s) P
- from t_score group by name
' \* K2 O' z1 K" z/ t/ i8 Z - union1 e; |+ Q" {# U; I! ]7 r5 k
- select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(
* Z0 w" A/ k% n: I+ s - select 'TOTAL' as name,
; v- `# [' i- G4 v- t3 o+ V8 L/ | - sum(if(Subject='语文',Fraction,0)) as 语文,
& o9 q1 k6 k( \4 U9 A: b( g8 Z - sum(if(Subject='数学',Fraction,0))as 数学, ) E* [8 d- j1 \' O; O
- sum(if(Subject='英语',Fraction,0))as 英语,9 Q0 v# Z( @5 e- Z* Z! D3 x
- SUM(Fraction) as 总分8 k) t: Z; c, n% v8 N# }+ i
- from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
. {7 m( j' \. P2 Q. o c9 i% l - sum(case when Subject = '语文' then Fraction end) as Chinese,
/ K# D2 L9 |+ R5 o4 O5 l - sum(case when Subject = '数学' then Fraction end) as Math,& ?6 G: X! Q @! D! U |; d$ T: J
- sum(case when Subject = '英语' then Fraction end) as English,4 |: i' {( y& E
- sum(fraction)as score( O4 E0 @! u& g& ~5 p
- from t_score group by name
4 }- F" ~2 S' B) u+ |' u - UNION ALL
* ] ?5 r/ _6 \7 g, v$ z - select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
; w: d. U+ P8 T/ r5 p4 Q' \0 K - select 'TOTAL' as name,. ~# J. G0 w3 g
- sum(case when Subject = '语文' then Fraction end) as Chinese,
% L+ Q0 K$ T2 P( |8 I% p5 Y - sum(case when Subject = '数学' then Fraction end) as Math,
5 g- L# p3 l: f, O% g' h - sum(case when Subject = '英语' then Fraction end) as English,
2 _$ T# |% t- W6 z - sum(fraction)as score
2 w5 }" M6 K6 F# W - from t_score group by Subject)t
复制代码方法三: with rollup - select
5 q% ]: l: p, ~7 c - ifnull(name,'TOll') name,
( N$ ] _& ]6 B! }3 ?2 V - sum(if(Subject='语文',Fraction,0)) as 语文,
& o( P% \; p6 ], W( }$ G& ~ - sum(if(Subject='英语',Fraction,0)) as 英语,1 L9 Q. C: v; y' V! m9 }" e
- sum(if(Subject='数学',Fraction,0))as 数学,
; C7 _$ d; d# C, ~& {; n - sum(Fraction) 总分! p0 H+ g& J+ S8 i$ s. T
- from t_score group by name with rollup
复制代码查询结果如下:
3 g% w: q* ]2 O* t+ c7 j+ Y
$ \$ f( _, D6 n# Z8 M6 ?) W |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|