|
|
原始插入数据如下:
4 Q6 V0 p; w, i& p3 F, ^2 {0 q要求查询结果如下 :
* g3 @/ E B- Z( h& A
4 a; F0 s9 R& |% d
( {( s" [6 x3 R7 g& V创建数据库、表
- @( k7 U) y# _" B- create database tests;. H: C. k# D8 M3 ]. Y- T9 G& i
- use tests;
8 U' v6 {- l7 s! ` - create table t_score(0 `( E0 U% d% E" \, V
- id int primary key auto_increment,/ w* i) i5 h' g7 G
- name varchar(20) not null, #名字
; q q `7 X& w( a, `. B - Subject varchar(10) not null, #科目
7 {' Q: q3 N' f- z. H% E - Fraction double default 0 #分数+ s: M0 I6 N8 J# S! ]4 T
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES0 o$ M3 [' s2 m( E! P7 T/ h
- ('王海', '语文', 86),( m. @4 w4 N8 @/ m+ y) x/ a: L
- ('王海', '数学', 83), m& L5 t: v$ I2 p
- ('王海', '英语', 93),( o4 G: y o0 r I/ A$ A
- ('陶俊', '语文', 88),
2 l- l# l/ ]7 E& v; F - ('陶俊', '数学', 84),
6 X" F- s9 H$ w4 J - ('陶俊', '英语', 94),
6 d; z; F# C9 N- i - ('刘可', '语文', 80),
6 r! J' X, K# d) m" q - ('刘可', '数学', 86),3 x/ l8 B% ^. _* m9 o [$ s
- ('刘可', '英语', 88),
6 d: Q- o: ]6 M/ D* J" S7 I! N - ('李春', '语文', 89),0 r2 q- |9 d. x x
- ('李春', '数学', 80),
* ^8 `1 y4 G* H - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,+ c$ p }& q, f
- sum(if(Subject='语文',Fraction,0)) as 语文,
$ {2 P/ s$ I$ D- G8 U& p - sum(if(Subject='数学',Fraction,0))as 数学,
! |( q% W/ Z. r. h2 q - sum(if(Subject='英语',Fraction,0))as 英语,
+ E" j K, t/ q - round(AVG(Fraction),2) as 平均分,, x( ~0 _2 H, j
- SUM(Fraction) as 总分
8 Q$ k! q# l( U, ]) y. F5 g0 p# E - from t_score group by name $ J6 l. N: _4 u! C5 ?
- union5 u: @* b7 G' I% K8 {- j7 e3 i: K
- select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(6 l9 v- F {1 a/ m$ L/ k* R Q; t3 ?
- select 'TOTAL' as name,
: b0 b, N0 N$ }1 T H - sum(if(Subject='语文',Fraction,0)) as 语文,
! } Y; K" P" W; ~: N4 | - sum(if(Subject='数学',Fraction,0))as 数学,
( K. o' ?! C7 S' E+ @% {5 F8 g1 Y - sum(if(Subject='英语',Fraction,0))as 英语,
0 `8 O( V8 x4 f# d& j" h - SUM(Fraction) as 总分
# D0 |' r- O$ Z$ i; B) ^ {4 r$ ~ - from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
9 }& m4 ^/ W: E# P4 U M( ~4 ~ - sum(case when Subject = '语文' then Fraction end) as Chinese,' g: s, [# }* R: h
- sum(case when Subject = '数学' then Fraction end) as Math,
5 _ F( z/ g2 j. P i - sum(case when Subject = '英语' then Fraction end) as English,
) l) v6 [5 ]9 n& Y R3 U - sum(fraction)as score
' p2 U" Z! n! A4 a. y3 \ - from t_score group by name
3 m7 F( l. b7 n% J - UNION ALL" A) g6 H7 [, e5 h9 a
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(1 T! s& ?6 H' d# D/ G5 D0 D7 [7 q) m
- select 'TOTAL' as name, F2 J' g( P6 g* Z0 B, p+ s
- sum(case when Subject = '语文' then Fraction end) as Chinese,
4 c0 J* ?: F- M* H4 s - sum(case when Subject = '数学' then Fraction end) as Math,
3 W2 P# \: Y: A( @/ o% n - sum(case when Subject = '英语' then Fraction end) as English,
+ |6 _. d1 j k! E$ T) w - sum(fraction)as score& ~; h$ ^: `* o
- from t_score group by Subject)t
复制代码方法三: with rollup - select ! B F1 r6 C8 e+ n
- ifnull(name,'TOll') name,
+ S- Z) _- _/ C- i, g" z - sum(if(Subject='语文',Fraction,0)) as 语文,, i9 m, a- ^* X2 x4 O7 j
- sum(if(Subject='英语',Fraction,0)) as 英语,
! q" u j" m; {- S/ \" s: [# q. F - sum(if(Subject='数学',Fraction,0))as 数学," ?1 B5 \2 T- D5 C7 T6 ~
- sum(Fraction) 总分& p i* g8 Z( {! R
- from t_score group by name with rollup
复制代码查询结果如下: " S+ I. `+ U6 g
- |+ i6 y6 k( l9 D
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|