|
|
原始插入数据如下:
- j: E: k" v0 r1 z" V% }# |. F% W要求查询结果如下 :
! f/ W0 Z# n+ o' e; W) K1 ~- V$ N) Z( }3 ]$ k4 h
) U6 J. n6 g1 o! d# u* i7 [2 N' @- H* F
创建数据库、表3 {% Q) a' d- p6 V8 i: X
- create database tests;' z6 x8 c: t6 ?* r8 A
- use tests;8 ^/ a. ]! k Q( R; ?4 B6 [- V
- create table t_score(
$ M3 Y2 S1 N& q! q! o5 T# G - id int primary key auto_increment,. {' g$ } B1 D+ q& g
- name varchar(20) not null, #名字
# o' q7 M, e: _' f x5 Y& _7 ? - Subject varchar(10) not null, #科目( v3 P9 O# n0 h% l7 i
- Fraction double default 0 #分数- b: h5 ^& K0 G7 C3 _" v
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES" [1 V) M2 e# i4 `
- ('王海', '语文', 86),
( x6 }7 `* f+ u0 [ - ('王海', '数学', 83),6 {9 i4 G! P( J5 P! U7 v2 j
- ('王海', '英语', 93),8 I5 Z U# k- m V) Y
- ('陶俊', '语文', 88),
5 R/ V" g* x' l. C - ('陶俊', '数学', 84),
1 Y: R- D- ^- ? - ('陶俊', '英语', 94),% C$ X1 ?- y0 U/ R
- ('刘可', '语文', 80),! `* R5 r1 n4 d- M5 \: t( r- ~
- ('刘可', '数学', 86),& }0 o: G" S% D0 S
- ('刘可', '英语', 88),
4 Q0 d R; \- f9 @* K, c" b; A1 l - ('李春', '语文', 89),2 S; P# S1 v8 m! U
- ('李春', '数学', 80),
- t0 r: e2 D1 D. D2 K% e5 A; Y W) | - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,/ \1 j9 B+ ~8 l" A/ w$ t6 h- `; ^7 i9 b: d
- sum(if(Subject='语文',Fraction,0)) as 语文,
0 Z. H6 F) A* {4 u9 O - sum(if(Subject='数学',Fraction,0))as 数学,
* [: p' Q3 `' n2 \, t! u) W - sum(if(Subject='英语',Fraction,0))as 英语,
, p6 K( m: I i. X8 ^; a - round(AVG(Fraction),2) as 平均分,
# q5 F! l( k9 Q- p - SUM(Fraction) as 总分 y/ v- k4 A. ^, z e8 ^
- from t_score group by name ! B n. }2 r. l' z4 T4 V
- union
+ z; W6 ~, r6 V) } - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(3 b6 l# m0 E3 d, O- ^6 E9 r7 I
- select 'TOTAL' as name,7 I2 U$ F0 h/ C' P c, ~# o2 s
- sum(if(Subject='语文',Fraction,0)) as 语文,; a! P1 a# S6 T2 C7 R) {7 F" C
- sum(if(Subject='数学',Fraction,0))as 数学, - Y7 E. T9 j& c- e/ E8 {9 d
- sum(if(Subject='英语',Fraction,0))as 英语,
. u2 [5 C: k4 M( O5 I4 ~ - SUM(Fraction) as 总分
) l- G# V& W/ N4 I. O - from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,, P& o& ~+ }5 Y' ^ G- l
- sum(case when Subject = '语文' then Fraction end) as Chinese,: ~+ R( v. s. y+ N1 u+ y
- sum(case when Subject = '数学' then Fraction end) as Math,( M+ r( k3 M9 ~6 C, H* T0 _5 ^
- sum(case when Subject = '英语' then Fraction end) as English,7 i$ w9 @) b* H1 b; x" c
- sum(fraction)as score- P" x/ a A, P2 y# ]
- from t_score group by name; T' p1 T0 z: B0 p
- UNION ALL$ \4 `7 ~/ f1 T6 G8 Q
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
: n4 J4 J( _9 l- X - select 'TOTAL' as name,
6 r; r! t7 x2 L" k5 k( [ - sum(case when Subject = '语文' then Fraction end) as Chinese,
( I1 A; V- \' z# ]( Q - sum(case when Subject = '数学' then Fraction end) as Math,$ V! y- u8 s$ r1 @
- sum(case when Subject = '英语' then Fraction end) as English,( g/ G6 P: W; O" Q1 L- Q: P" D
- sum(fraction)as score
% q7 K) b2 s& f, J' T5 L - from t_score group by Subject)t
复制代码方法三: with rollup - select % w- A0 M9 M: d2 f& B# q
- ifnull(name,'TOll') name,& Q0 {2 K' ~ P4 @" v% }
- sum(if(Subject='语文',Fraction,0)) as 语文,
$ c) v" M6 E" W - sum(if(Subject='英语',Fraction,0)) as 英语,
6 d1 N: X* Y3 c' _( ~5 Y. v - sum(if(Subject='数学',Fraction,0))as 数学, U i7 v c% C* f* T3 D0 |
- sum(Fraction) 总分$ ` N1 @. ?7 q) q
- from t_score group by name with rollup
复制代码查询结果如下:
. H- @# ]6 M2 A/ f+ M/ A5 B
( u7 X7 x' s0 U, h |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|