|
原始插入数据如下:
9 E) a7 ]7 ?$ R2 b M要求查询结果如下 :* U; s) Q& b6 [+ D3 c) @6 f3 O. q
3 ?' v/ R6 L6 ]! M1 W# j3 Q
) G: @3 {& ]. ]创建数据库、表
0 x! G6 B: U! M1 P6 p3 k& k- create database tests;
7 y% S m. O' Q b7 Y6 ~' m - use tests;
6 p$ k, b$ p0 {! N, ^& ^- ~: N: a1 k7 F - create table t_score(
@! F8 {/ J+ q" w3 E - id int primary key auto_increment,
8 X* S6 S2 C8 ]$ B g M i' | - name varchar(20) not null, #名字
& X! }4 p# `" H0 [ - Subject varchar(10) not null, #科目
Z. \6 ?# p1 ^, b1 o - Fraction double default 0 #分数; k& F. z$ S& W( q+ {: T. _8 U2 H
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
8 W2 D j8 t6 R0 p" b5 }1 ] - ('王海', '语文', 86),
3 m3 @# U8 U4 j# r3 S- a - ('王海', '数学', 83),
; j% u5 h! H8 L2 K, p; A - ('王海', '英语', 93),4 d0 r4 z4 y! u; y" D; }
- ('陶俊', '语文', 88),+ M$ X3 n# w X4 q5 E5 R1 h
- ('陶俊', '数学', 84),* ~6 l+ k6 t! V1 U' L! P
- ('陶俊', '英语', 94),+ m; d0 H+ Y- _% o3 @1 n8 J
- ('刘可', '语文', 80),
/ B& [+ }: C' N: j- @! c$ l9 S2 Z7 h& V - ('刘可', '数学', 86),& J, z% ^3 X5 Q% P
- ('刘可', '英语', 88),3 z2 c; m% k* D: f; K6 @
- ('李春', '语文', 89),6 f: t0 b/ ~; w$ N6 S% S
- ('李春', '数学', 80),9 D+ \. j: r- C: @; a
- ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,+ z+ l( }' d {8 a) E2 f; _
- sum(if(Subject='语文',Fraction,0)) as 语文,
4 V1 Q9 ~6 L( N- S$ L( q0 | - sum(if(Subject='数学',Fraction,0))as 数学, + B# X5 u$ I5 Z: ~7 N- |
- sum(if(Subject='英语',Fraction,0))as 英语,. i7 h$ i, a0 I
- round(AVG(Fraction),2) as 平均分,/ y+ w" [( p3 s7 t0 b
- SUM(Fraction) as 总分
$ H6 Y: R' s3 b* n2 H - from t_score group by name / D( ~8 B5 K1 f# s" {( m
- union4 Y8 {/ C8 s! ^8 K9 g1 y
- select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(
% T h4 a" [% ], Q# ?& D - select 'TOTAL' as name,
8 @! V) G& L/ L8 ^$ B - sum(if(Subject='语文',Fraction,0)) as 语文,
7 p# {5 p4 l, y2 S4 U - sum(if(Subject='数学',Fraction,0))as 数学,
9 U- p( o8 J# b# S9 Q - sum(if(Subject='英语',Fraction,0))as 英语,
% o) q% ]6 t* p0 e; Y. ]" ]1 {3 { - SUM(Fraction) as 总分# F* j' v7 Z$ f9 m% X- b
- from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
' u7 m. n# v* y3 ] - sum(case when Subject = '语文' then Fraction end) as Chinese,% l2 q( D! s5 l. `6 ^% c) p
- sum(case when Subject = '数学' then Fraction end) as Math,
) m8 R" y7 U, s( ?, v - sum(case when Subject = '英语' then Fraction end) as English,) u, A g! x S% Y- _7 Z2 [* a
- sum(fraction)as score7 o7 E# p/ V( B; L: F+ b) W) ?% k
- from t_score group by name& i) r& G" v0 T3 D" u( ?
- UNION ALL
' ]% \; s, W) Y$ u; P" C - select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(4 h! X1 T" X4 v3 O
- select 'TOTAL' as name,, z7 j8 C |, q2 ] g
- sum(case when Subject = '语文' then Fraction end) as Chinese,
" l$ a* {/ w2 Z* {! I' h8 C - sum(case when Subject = '数学' then Fraction end) as Math,
# h4 m4 N/ Z) _" U+ E P- l, v" n - sum(case when Subject = '英语' then Fraction end) as English,2 ~# G+ ^! G0 t% r* I" T+ {
- sum(fraction)as score2 `2 \2 c6 x8 g) o1 `' p" a
- from t_score group by Subject)t
复制代码方法三: with rollup - select
. P, U/ y3 ]' X* x - ifnull(name,'TOll') name,1 M7 h' `" J# Y/ a# v4 u0 [
- sum(if(Subject='语文',Fraction,0)) as 语文,
' |; \( [' [1 u/ y) L0 {! A3 L3 ~+ @( a - sum(if(Subject='英语',Fraction,0)) as 英语,: c; v2 w7 ^& `) [
- sum(if(Subject='数学',Fraction,0))as 数学,
( P! b0 N; @$ o7 B - sum(Fraction) 总分) T. J- z) M2 B
- from t_score group by name with rollup
复制代码查询结果如下:
1 ?7 r( C$ M: r5 t/ R9 @
0 S* u3 n- B0 {! D& c/ H, x7 W |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|