|
|
原始插入数据如下:4 R2 P3 w, o+ }" l
要求查询结果如下 :
: U7 Z/ ?" D/ l: \6 g0 |9 R' k' J. ^" ]- [
]: S; o R. _! u8 K4 f" n% @- [创建数据库、表
! x3 \8 q! Y% F* `& k- P8 {- create database tests;. N, Z; e# Y. I. o
- use tests;9 v$ H7 V4 J, r, M
- create table t_score(. u( W/ G5 [9 C; K! ]% q
- id int primary key auto_increment,
& }3 Y! i+ n. E T. k; i+ T - name varchar(20) not null, #名字9 _6 X1 E$ r. N9 u! X
- Subject varchar(10) not null, #科目2 c7 h: Z; L' o4 c
- Fraction double default 0 #分数! }1 O( m' w8 G' V- K) k
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES5 A5 l5 m9 L; b: V( R
- ('王海', '语文', 86),
% r+ w% n( W v9 w& } - ('王海', '数学', 83),
% _0 K$ p: a% b$ J, k - ('王海', '英语', 93),* r3 q Z* q$ S
- ('陶俊', '语文', 88),/ k! g4 d6 H* w0 \( y
- ('陶俊', '数学', 84),8 q( Y! ^* t/ r- r
- ('陶俊', '英语', 94),
$ o! w6 j! H( l3 g - ('刘可', '语文', 80),2 U& K2 c5 n7 e1 H( Y$ L# X
- ('刘可', '数学', 86),0 t" E/ R+ }4 ~, ]! o5 y7 b
- ('刘可', '英语', 88),
) `7 S) e7 r0 _ - ('李春', '语文', 89),
5 j% f( e1 D! G+ u' a6 @* h& b9 ^% c - ('李春', '数学', 80),
2 R" ^2 m$ _2 R, c+ B - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,
4 M7 k1 j6 D6 S$ X2 Q0 _$ g - sum(if(Subject='语文',Fraction,0)) as 语文," V% Z$ L% i' H, B8 t
- sum(if(Subject='数学',Fraction,0))as 数学, * r& h8 p. N# q) f
- sum(if(Subject='英语',Fraction,0))as 英语,( D0 @1 [4 Z3 f1 \ \+ u6 }& g
- round(AVG(Fraction),2) as 平均分,0 [% ]) \5 P) f2 |/ F( ] o
- SUM(Fraction) as 总分5 I! t: w R( c4 d
- from t_score group by name
" n' }& F3 {$ _4 _) a7 v - union
) k D$ b2 G4 O1 D! G - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(; q; a2 ~* _* E7 k# H
- select 'TOTAL' as name,0 ?9 h% V$ m( n( B! @9 o9 f
- sum(if(Subject='语文',Fraction,0)) as 语文,
& a& q2 m+ ^6 j - sum(if(Subject='数学',Fraction,0))as 数学, * l/ \2 X9 }, X- s+ D
- sum(if(Subject='英语',Fraction,0))as 英语,
5 {9 s! O% A0 f# Z* ?0 N7 v+ a - SUM(Fraction) as 总分
' P- s8 l# k: d" w- F1 k) q. D - from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,0 v! B- z* [7 s0 h
- sum(case when Subject = '语文' then Fraction end) as Chinese,9 C5 @1 p% D8 z4 T, a- A
- sum(case when Subject = '数学' then Fraction end) as Math,
% q6 d3 M5 V: Z+ U - sum(case when Subject = '英语' then Fraction end) as English,
! m4 J+ e2 E) }/ Y - sum(fraction)as score$ G$ }1 ]# ~7 m# z7 ~ n
- from t_score group by name
`- M; ~( U; ?. U: Z2 z - UNION ALL
! V) g9 ?4 y X - select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
: H2 ^# {0 C5 b5 f9 d& e - select 'TOTAL' as name,
0 F% j5 R& Z. M$ R+ k - sum(case when Subject = '语文' then Fraction end) as Chinese,
7 `; B2 g9 J, Z4 z - sum(case when Subject = '数学' then Fraction end) as Math,
4 P k0 v: u' M2 a1 O* ] - sum(case when Subject = '英语' then Fraction end) as English,
/ [0 V2 q2 Q" Z6 Y - sum(fraction)as score
- x3 D3 y$ J; v1 @' ^5 v - from t_score group by Subject)t
复制代码方法三: with rollup - select 3 v2 t& I& q8 t* _ B5 J
- ifnull(name,'TOll') name,
O1 s" t8 y% j; k1 b8 H5 P) F6 K - sum(if(Subject='语文',Fraction,0)) as 语文,
6 |0 \9 ]) w( \, @+ K - sum(if(Subject='英语',Fraction,0)) as 英语,' ~. v7 u* g: z7 e9 ~4 H% |' l
- sum(if(Subject='数学',Fraction,0))as 数学,
& u+ q; }& C3 u, N - sum(Fraction) 总分# O' j) I# G" Z$ v7 P+ \5 I5 z
- from t_score group by name with rollup
复制代码查询结果如下:
1 O# m: C) }- m: c5 A, _
) b+ r9 h+ P- ~# e! n% p* ?' F3 j |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|