|
原始插入数据如下:
) L) R; ~% b' K5 S! [$ R要求查询结果如下 :
9 B2 V' ?' i. B7 K( N7 p
9 S- H! F! c F4 ` K1 R/ H- b& l
2 b/ o; j& J: s4 t2 K* s: d3 f" L创建数据库、表' o5 Q2 v! u, D
- create database tests;: q% Z: [/ y5 d1 a
- use tests;
' a; A/ `; M! f: L - create table t_score(' q( S+ ~: k* T. b6 W
- id int primary key auto_increment,
$ A$ i' S1 o5 N! u6 J - name varchar(20) not null, #名字
* d' x1 B2 s6 T* A8 @) u: W$ Z) ^( w - Subject varchar(10) not null, #科目
" Y$ O" y/ V+ N Y5 v: p! `9 ~ - Fraction double default 0 #分数8 n, c3 s. e+ E7 ?
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES# p+ S' X, ^3 W9 O0 j+ V9 |
- ('王海', '语文', 86),
7 c% i) J: k: W5 T8 y0 Y9 G* H - ('王海', '数学', 83),5 ~+ ]$ {8 ~' l. R3 k4 ?+ V. E
- ('王海', '英语', 93),
- }8 X+ O; L. W- S - ('陶俊', '语文', 88),
# u7 S. }% n& f2 e - ('陶俊', '数学', 84),; p2 s4 w0 s/ d
- ('陶俊', '英语', 94),& T1 f2 q" h0 a: e
- ('刘可', '语文', 80),7 Q! L: u/ Y; {/ L8 o
- ('刘可', '数学', 86),
& L# U- y1 Y: |- W% _ - ('刘可', '英语', 88), [; y7 i& r* J, [6 i
- ('李春', '语文', 89),
0 p, l( |. o2 d - ('李春', '数学', 80),
9 a7 Y: Q/ N7 l - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,- S4 L) p1 ^, f7 g& v5 A
- sum(if(Subject='语文',Fraction,0)) as 语文,' u5 _4 N {0 ^! L- v6 ^" M
- sum(if(Subject='数学',Fraction,0))as 数学, 9 W9 Y; e: U, \ Y7 c6 Y
- sum(if(Subject='英语',Fraction,0))as 英语,! O( X) g" h" l9 z5 }5 Q& {
- round(AVG(Fraction),2) as 平均分,
* e- k& ?" M7 m1 @7 {. T M# _& d - SUM(Fraction) as 总分
) x4 x/ l) ^ H( Q - from t_score group by name
) ]: \, c: a9 Z+ Z3 {5 k, h! g2 t - union
0 D6 V% \$ ^# t, c9 {% {! _ - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(' Q/ d! n+ ?1 ]" e/ R! D7 A5 B
- select 'TOTAL' as name,+ ]. h" \9 }2 Q4 t# o; ]7 H" V
- sum(if(Subject='语文',Fraction,0)) as 语文,
( j/ o+ |! C7 j3 L# j4 o - sum(if(Subject='数学',Fraction,0))as 数学,
( r7 t) U8 r% `( P n - sum(if(Subject='英语',Fraction,0))as 英语,5 w' v9 x, B! t' n# h- P
- SUM(Fraction) as 总分
" G* n" s5 X0 \5 R* c+ m% w - from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,- r1 J% B. P! A; Y& z
- sum(case when Subject = '语文' then Fraction end) as Chinese,
" w5 q3 Q. z0 m C# O' M9 a0 K - sum(case when Subject = '数学' then Fraction end) as Math,5 A" R) v( X4 c" y! E$ a* m" X c
- sum(case when Subject = '英语' then Fraction end) as English,
6 s0 x# ], s9 @( @6 M - sum(fraction)as score
* Z, G2 F: M# X- z* y - from t_score group by name
3 @5 [2 d1 O6 T9 J$ j$ h3 q6 E- Y( s - UNION ALL4 a2 K; X! I5 Z1 D) x5 F
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(6 s; q( f7 \" o- a8 \+ }) M
- select 'TOTAL' as name,! O# p3 s! X9 l# [' ^6 o* V7 u+ y
- sum(case when Subject = '语文' then Fraction end) as Chinese,) L: N7 Z# @- g) a
- sum(case when Subject = '数学' then Fraction end) as Math,2 V2 Y5 g3 J+ Y" ~% n: f2 ~
- sum(case when Subject = '英语' then Fraction end) as English,
. }! ^2 ?9 F3 a$ |4 B6 S - sum(fraction)as score# a3 X0 P/ b/ n# S& }9 U7 o7 G/ H
- from t_score group by Subject)t
复制代码方法三: with rollup - select
" p0 U* S# q/ H - ifnull(name,'TOll') name,% n R* p e. x0 u2 c6 M
- sum(if(Subject='语文',Fraction,0)) as 语文,' x' r2 x! R9 ~/ t! _) y$ H8 k
- sum(if(Subject='英语',Fraction,0)) as 英语,
8 }# c/ p9 }: r( i8 O' G2 q - sum(if(Subject='数学',Fraction,0))as 数学,
7 F, k+ f$ p: D( c* Z - sum(Fraction) 总分8 r9 k6 ~1 F9 g( l9 O ?% ` V
- from t_score group by name with rollup
复制代码查询结果如下: - M( |4 u/ t0 m( H0 r7 T, {
/ x3 n7 }0 S4 L: Y3 V5 x) V' U% W |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|