|
|
原始插入数据如下:8 I/ ~+ c: h2 E- x5 Z
要求查询结果如下 :* V: e) _, [+ U$ K
6 g$ k: }1 }4 D7 Y% U. K0 _2 F
0 { r6 f( W: X$ c创建数据库、表- c: s6 h. a" V
- create database tests;
# M' y2 O1 T' X& a3 f; x9 [% w - use tests;8 r& P2 e, G* a" e' @
- create table t_score(7 i6 S! Y: V7 {- [
- id int primary key auto_increment,
* q& x' K1 ^: @; n# Z' @& t3 C - name varchar(20) not null, #名字
0 p5 C) O# g Q$ X8 |: ^ - Subject varchar(10) not null, #科目% D; B1 f& d# f& A+ p
- Fraction double default 0 #分数
7 R) R0 q0 a8 ]% ?# N; S - );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
; g U: P/ _ | - ('王海', '语文', 86),, N1 B" A* b& J! _, X
- ('王海', '数学', 83),
4 x) ?3 t0 s* j& w - ('王海', '英语', 93),
* Q1 X4 v& Q% u2 g7 E7 o - ('陶俊', '语文', 88),
0 E1 u/ b1 W" Z; G( w - ('陶俊', '数学', 84),
* p! d3 `3 ~! S) t1 l$ n - ('陶俊', '英语', 94),
: D, F9 g9 [! J# U7 a: o% J - ('刘可', '语文', 80),
* `! O. K! \3 K$ G; ~! A4 e" J! O - ('刘可', '数学', 86),
1 @1 k7 I( p$ T, A; q' I; M8 P - ('刘可', '英语', 88),9 s- [6 I) b) W' V) K7 O2 C
- ('李春', '语文', 89),2 y- ~+ x- ]0 w& D+ n5 @
- ('李春', '数学', 80),
" a. C$ ^. B T$ L4 ]% p, y9 f% S - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,* J# K- v+ {" Y) ]. N
- sum(if(Subject='语文',Fraction,0)) as 语文,
+ Y5 n/ R4 ]. e7 Q6 T, B6 E - sum(if(Subject='数学',Fraction,0))as 数学,
% Z& E' _ E% L& O - sum(if(Subject='英语',Fraction,0))as 英语,
3 T6 Q1 K. P; N9 O - round(AVG(Fraction),2) as 平均分,
2 Q# R- T! l2 }; ~% K9 Y& c# y - SUM(Fraction) as 总分
8 `& {& }/ I( R [- j0 Q: D6 V - from t_score group by name " B# D/ x" Y5 I, {- G& ^+ K
- union
% H, y) `/ _, S - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(8 I; b# N0 B3 |) D, P
- select 'TOTAL' as name,
: q" k' Y8 m+ r9 \5 }2 a5 P - sum(if(Subject='语文',Fraction,0)) as 语文,
" P, }2 l0 R2 m5 G ^ - sum(if(Subject='数学',Fraction,0))as 数学,
4 N4 T$ r! t& B; D - sum(if(Subject='英语',Fraction,0))as 英语,5 ~$ ^ D5 x. X$ r( H* B
- SUM(Fraction) as 总分# B" j# Q, l% ?+ J y$ H5 E$ x- Z
- from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
0 p5 D: D9 t" P4 G! g- | - sum(case when Subject = '语文' then Fraction end) as Chinese,
- V. w# h; n5 Y: _ - sum(case when Subject = '数学' then Fraction end) as Math,# V6 {! _6 q0 d% k
- sum(case when Subject = '英语' then Fraction end) as English,
5 z k1 `3 t$ k; @, ~0 ?) p - sum(fraction)as score
: u% \: [& R; B* v5 } - from t_score group by name
! |0 j3 u& F P# K1 t7 \* B5 A - UNION ALL* c: c. w7 {" P! x; E
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(: c0 ?2 T, F( w& f( d% Y
- select 'TOTAL' as name,
! y( A1 M! d4 w7 ~ - sum(case when Subject = '语文' then Fraction end) as Chinese,+ K+ E" h) K5 |0 b2 e! M; [
- sum(case when Subject = '数学' then Fraction end) as Math,3 N$ v8 B; P6 A8 U2 ^+ m$ i
- sum(case when Subject = '英语' then Fraction end) as English,
) U& ]( S% `! T' m: P - sum(fraction)as score# S& ]1 |/ m9 K T3 V2 s4 R' Q, T
- from t_score group by Subject)t
复制代码方法三: with rollup - select , A6 J1 I$ [% \" e2 z% j; G1 [
- ifnull(name,'TOll') name,9 u. O: x: r) n' _1 X
- sum(if(Subject='语文',Fraction,0)) as 语文,$ n: h! A) B& G1 v
- sum(if(Subject='英语',Fraction,0)) as 英语,! @. D) p m3 [! \
- sum(if(Subject='数学',Fraction,0))as 数学,
3 e: |6 ~6 e, M* T0 b - sum(Fraction) 总分' q- D0 ]( p1 s4 I* W4 L
- from t_score group by name with rollup
复制代码查询结果如下:
: J- z( N/ N' B# P- d, D9 g/ ]: y- I" |4 @; m6 |
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|