|
|
原始插入数据如下:3 J1 }5 |& _/ U$ c9 W: r
要求查询结果如下 :
6 W/ H9 `( I9 X a; C2 ~8 o3 y: s% l0 [' o) B) a
$ j9 s V2 b7 t, A$ F; O M
创建数据库、表
' D5 ^) _/ N0 y Y) g, E% L5 J% r8 H- create database tests;' i" K; [ b& {
- use tests;' L- H3 I# {1 W+ P
- create table t_score(
' s' f7 I3 Y# r' y( z9 _ - id int primary key auto_increment,% k, b* ^; ~& I! ?( Z8 c
- name varchar(20) not null, #名字
1 a/ W; P( g. G( Y: E1 t" h1 c - Subject varchar(10) not null, #科目' D% F: v, ~1 h1 r/ O. K9 p% k# t5 H
- Fraction double default 0 #分数4 W$ [2 h5 z. s l+ \* m
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
4 ?" V( M( h4 w& U - ('王海', '语文', 86),- s/ J( R3 I& M M" x# Y4 ^" G2 i9 T& N
- ('王海', '数学', 83),# H6 G- n. @% E2 N
- ('王海', '英语', 93),% ^" F5 V" ` \+ q
- ('陶俊', '语文', 88),8 `0 C7 C' n. l1 ?- x6 F# t) K
- ('陶俊', '数学', 84),3 ~2 |8 S6 g: c: n/ o: x
- ('陶俊', '英语', 94),
/ ~7 P1 x" [. l6 U; j - ('刘可', '语文', 80),
5 v/ X2 d9 ?3 C. k( q - ('刘可', '数学', 86),% O7 Q9 [+ l( C& P) y! `) s3 R; T3 n
- ('刘可', '英语', 88),
( I5 Q* {& J* a, S- ]+ b - ('李春', '语文', 89),: @. u: M" \! K1 h# } W
- ('李春', '数学', 80),
, V; X4 B$ ?8 E3 x - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,
, h: ^) W( N8 D$ } - sum(if(Subject='语文',Fraction,0)) as 语文,8 ^+ I+ o, h& G6 n' u) {8 ?+ n. D/ D) X
- sum(if(Subject='数学',Fraction,0))as 数学, : A! O$ B, S5 f, W
- sum(if(Subject='英语',Fraction,0))as 英语,8 {. F1 z$ x$ i1 ]# P5 y) c) q1 U, {
- round(AVG(Fraction),2) as 平均分,
$ c- E& R% z8 ^: N0 T: K3 O( K - SUM(Fraction) as 总分" Y6 t X7 v$ G9 m
- from t_score group by name
2 z4 k( {( |9 a. K& _ - union
. v# i4 d2 E& q j4 f - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(2 G- o4 ~) }& r) Y4 e9 s
- select 'TOTAL' as name,
7 v F" N) q5 Z& B4 w - sum(if(Subject='语文',Fraction,0)) as 语文,
% b( Q; L" B9 O6 J/ w - sum(if(Subject='数学',Fraction,0))as 数学,
3 a, @5 p; c% ~0 A0 _ - sum(if(Subject='英语',Fraction,0))as 英语,, `/ ]$ \1 q7 C6 ~6 o7 {# X
- SUM(Fraction) as 总分
3 ^. I. H7 p3 Z$ O2 W b - from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
' b3 p/ o; }, e4 `) T( g! D - sum(case when Subject = '语文' then Fraction end) as Chinese,# r5 D, T5 M7 Y% h
- sum(case when Subject = '数学' then Fraction end) as Math,
7 W( X! r, ~2 t5 }6 A! u - sum(case when Subject = '英语' then Fraction end) as English,
, y s- _' `5 B" n& c - sum(fraction)as score
* y0 I5 X8 w& F( {- K - from t_score group by name
`$ h" q, v5 ]! B - UNION ALL7 h W2 T0 b3 Q! s9 K( X' p" A9 ^
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
3 F* m. E( u# t) J# b - select 'TOTAL' as name,
% ~5 G( o: j/ k' ? - sum(case when Subject = '语文' then Fraction end) as Chinese,
% D$ L: r; p% _3 Z, I$ E/ ~' x. h - sum(case when Subject = '数学' then Fraction end) as Math,
/ E. D- G5 F, h% I - sum(case when Subject = '英语' then Fraction end) as English,
% K+ F5 O3 p7 i7 L1 E$ P - sum(fraction)as score O& m+ u$ F. C2 W$ w' @# Y
- from t_score group by Subject)t
复制代码方法三: with rollup - select # l' N- W+ j% {# W% }
- ifnull(name,'TOll') name,
: v0 c; s3 u! J; |1 p% ]/ O4 R - sum(if(Subject='语文',Fraction,0)) as 语文,$ A4 I; h, R* _* r( p% U
- sum(if(Subject='英语',Fraction,0)) as 英语,% {: \+ u0 s% O6 }5 H2 K9 K
- sum(if(Subject='数学',Fraction,0))as 数学,) O) A5 ?+ X2 M9 D9 _
- sum(Fraction) 总分. o& B9 m0 ?3 f* w+ O- I
- from t_score group by name with rollup
复制代码查询结果如下:
+ _8 Z5 K# L$ z" @) c/ M
3 G2 \- |9 h: n1 g |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|