|
|
原始插入数据如下:
, Q+ L# } |1 T要求查询结果如下 :" ]- c* U7 j2 q' z
' l f' h3 G8 @
, X1 R7 N3 D/ @- C. J4 R+ ` S* _
创建数据库、表
3 H; O8 A6 Y# o3 B- create database tests;: ~2 W+ X9 c8 I3 u; n+ C2 h5 z
- use tests;5 K4 |. [8 n: C# \% C6 @
- create table t_score(
. i5 l7 A# m+ P/ b: ]+ w- Q2 V$ K - id int primary key auto_increment,
1 E& M) i$ m9 s* n4 x - name varchar(20) not null, #名字 B1 C# m, M8 r- k6 x2 {+ \* e+ y! L
- Subject varchar(10) not null, #科目
* ]1 ~& T) l1 ~7 w3 ]/ X- ` - Fraction double default 0 #分数 e4 J" W' ?0 h0 ^) r8 S
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
0 F" d/ I" C$ R+ D! ~4 ] - ('王海', '语文', 86),3 R' v2 {& e1 U; ]
- ('王海', '数学', 83),
5 h* }1 f4 X* w - ('王海', '英语', 93),
+ V4 p; U% ]5 f( a9 w - ('陶俊', '语文', 88),6 v3 W" H) V$ n8 t s1 I5 I* }( `
- ('陶俊', '数学', 84),
8 a v" D+ O" M, U( p, P* i/ s/ E - ('陶俊', '英语', 94),# e- H& M6 m1 ?/ g: R( h
- ('刘可', '语文', 80),/ J# M% b% Z# z: @
- ('刘可', '数学', 86),
- q& [# _$ w, }' g - ('刘可', '英语', 88),
p8 I7 P5 |1 e - ('李春', '语文', 89),
. U, v* U/ z: r4 H$ P* A - ('李春', '数学', 80),$ `$ C2 {% N; e
- ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,
" R' c) i. O& J. S' d- E2 O - sum(if(Subject='语文',Fraction,0)) as 语文,4 K* \- f1 g y# |- v- h. h/ H
- sum(if(Subject='数学',Fraction,0))as 数学, 0 c0 m3 @( d& P! @
- sum(if(Subject='英语',Fraction,0))as 英语,4 q3 }( {! p" W' c8 h7 o4 X3 ]
- round(AVG(Fraction),2) as 平均分,9 y# F/ C, W8 w" a
- SUM(Fraction) as 总分
7 _/ U* ^% R+ m* j7 F - from t_score group by name
( }0 ]/ s7 Y$ z) t: ^# Y( q7 ~ - union
2 ?3 B1 d7 q7 t& p8 x1 n Q - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(
1 h6 w# ~/ R$ {0 G - select 'TOTAL' as name,, B+ g; A3 s8 ]9 o6 E" A) @2 L
- sum(if(Subject='语文',Fraction,0)) as 语文,& q+ ]8 P6 Z) f: }5 d2 a0 M
- sum(if(Subject='数学',Fraction,0))as 数学, - g) {/ G1 K/ a; ~5 ]- a" }
- sum(if(Subject='英语',Fraction,0))as 英语,
5 D0 p$ `. L7 Z4 v J - SUM(Fraction) as 总分
/ z/ x' n- t$ s! u* ~ k9 N - from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,0 k8 Z: Z# D! x7 o% @& H
- sum(case when Subject = '语文' then Fraction end) as Chinese,' _8 T: b) `$ r1 e' D1 F7 Y
- sum(case when Subject = '数学' then Fraction end) as Math,
^7 e, d" d! A" R7 K8 B - sum(case when Subject = '英语' then Fraction end) as English,! S3 t' N# v1 U5 m$ @6 [# ?
- sum(fraction)as score
5 ?( B$ T" }! D7 `$ b# k$ M - from t_score group by name
( I: g% u* f: U" I) G - UNION ALL7 X5 z2 J# {3 }( B' A
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
% E1 B9 ]5 q* w+ f- n - select 'TOTAL' as name,8 M0 R. ?, M v5 W$ y- u
- sum(case when Subject = '语文' then Fraction end) as Chinese,
; a1 j& \, _1 k1 Y% _5 W - sum(case when Subject = '数学' then Fraction end) as Math,
: b% Y/ q0 m8 V* g$ h+ s - sum(case when Subject = '英语' then Fraction end) as English,
4 ~3 `, [' O2 { - sum(fraction)as score
: k E# g4 H( }+ S6 W - from t_score group by Subject)t
复制代码方法三: with rollup - select 6 y1 g1 v) M6 Z( ?% z
- ifnull(name,'TOll') name,
- V: ]( f: J5 c" l8 e - sum(if(Subject='语文',Fraction,0)) as 语文,2 ?! S& R' X8 v/ O2 w8 D7 F$ n
- sum(if(Subject='英语',Fraction,0)) as 英语,
+ V7 o( e# c9 f - sum(if(Subject='数学',Fraction,0))as 数学,
9 Y7 U) ~2 Q8 [, B4 G @3 T% i' [: d - sum(Fraction) 总分) X+ Q! I0 J C0 f. ^2 O
- from t_score group by name with rollup
复制代码查询结果如下: 5 e" f0 k: h- f/ Q3 E0 M
! _+ i2 o7 D: D- V |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|