|
|
原始插入数据如下:. y4 Z$ y5 c+ `
要求查询结果如下 :; _+ L4 n" T$ J9 c) _6 J I
6 L7 ?1 J9 U J" `& L0 y9 D% ], u2 q
创建数据库、表
) p6 S+ ?+ z! |) {1 w1 F5 V* y3 v- create database tests;! B9 O% R7 f: d
- use tests;' x8 ?7 T$ n# K
- create table t_score(
8 g) ^# a8 M6 o' ] R6 _1 {9 ~4 F - id int primary key auto_increment,
8 C1 ^$ h) h/ n# i - name varchar(20) not null, #名字( { }( q. _5 t. S
- Subject varchar(10) not null, #科目
; @0 {' V9 r- ~6 N- @9 z. r - Fraction double default 0 #分数
& r2 l4 u) x* u8 W' r. B% s - );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
# \) A2 w3 D) x6 @$ z& `, E. ?. |+ Y/ Q - ('王海', '语文', 86),
7 D/ v( b5 r2 }" O8 \ - ('王海', '数学', 83),
, ^/ ~3 j# j. v6 c3 J0 ?4 `$ n! s - ('王海', '英语', 93),. b7 ~# Y& ~* d" W \
- ('陶俊', '语文', 88),% }6 B/ n9 c( P! G. p( H8 S C3 x
- ('陶俊', '数学', 84),
9 ?3 T4 Q! n( |2 k) a - ('陶俊', '英语', 94),0 [! i7 N/ }' _1 v+ r. C, V; F
- ('刘可', '语文', 80),
$ P7 i" j2 c) O5 i - ('刘可', '数学', 86), J% p! e+ S7 C- d) w$ M; M$ Q
- ('刘可', '英语', 88),
! t, f4 C. p" W6 i: a - ('李春', '语文', 89),8 J8 {) D- d0 D2 A8 t/ b$ \; |& b
- ('李春', '数学', 80),' ?' a! J2 q5 Y( d
- ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,& z6 l% \# ?# Q0 L+ s2 X) B$ q
- sum(if(Subject='语文',Fraction,0)) as 语文,
! a5 l4 h4 D; B$ O - sum(if(Subject='数学',Fraction,0))as 数学,
2 V4 b: y4 H9 ^5 m- _, _* i4 e3 A - sum(if(Subject='英语',Fraction,0))as 英语,
( c/ }6 I5 A# X5 B6 v - round(AVG(Fraction),2) as 平均分,3 k% S8 @" |* K! }! l/ m$ Y: \2 v& q/ r
- SUM(Fraction) as 总分; X: t. E( h! @, X# N
- from t_score group by name 8 ~2 G n2 M0 f
- union
3 B0 C2 b, b" }4 B - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(
% s: s7 U- M' U6 S0 Y6 a- P0 Z - select 'TOTAL' as name,
- ?% W8 R$ D2 D9 i! {1 b$ w - sum(if(Subject='语文',Fraction,0)) as 语文,
" q" G: j4 f9 G1 e - sum(if(Subject='数学',Fraction,0))as 数学, 2 E$ J& f; u& n5 I3 ~0 x
- sum(if(Subject='英语',Fraction,0))as 英语,
/ M& M" r4 D) w* o - SUM(Fraction) as 总分. e1 z0 o& {# R4 R- d/ D
- from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
/ ]& `( W7 t" K) y' F; q& E - sum(case when Subject = '语文' then Fraction end) as Chinese, R' g4 h& m j4 u2 I
- sum(case when Subject = '数学' then Fraction end) as Math,7 w0 j( z7 n5 ?$ p3 |' w" a& J, C
- sum(case when Subject = '英语' then Fraction end) as English,9 ] d* i9 x' F9 F6 M7 D* V
- sum(fraction)as score" e0 o: e* q, M* ]
- from t_score group by name
4 B: Y" }' j) O5 d - UNION ALL( B) a6 k9 J: Y2 i( u6 G( l
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(: Z: }2 R0 S+ w; E
- select 'TOTAL' as name,$ f$ j) u) H- {( g
- sum(case when Subject = '语文' then Fraction end) as Chinese,! \1 N, \) V; W/ y# `
- sum(case when Subject = '数学' then Fraction end) as Math,
/ ?6 p! U( f& z6 z5 w - sum(case when Subject = '英语' then Fraction end) as English,/ K4 l; L' c( ~5 O8 A/ X9 F
- sum(fraction)as score! t3 }9 A9 ^5 F# K, R! [
- from t_score group by Subject)t
复制代码方法三: with rollup - select
% s d" k" _. z1 \; R8 G+ a - ifnull(name,'TOll') name,
" Z+ ?+ _/ D+ O' u. v, a - sum(if(Subject='语文',Fraction,0)) as 语文,# K) w+ S/ u0 Z0 U7 h
- sum(if(Subject='英语',Fraction,0)) as 英语,
" l5 ?7 u4 o, R6 ^, ^% c$ ? - sum(if(Subject='数学',Fraction,0))as 数学,
( U% ]- u! f8 l, D0 W0 d - sum(Fraction) 总分
7 B- P, b5 i6 i - from t_score group by name with rollup
复制代码查询结果如下:
1 n) h; k8 O* t8 F# w8 G9 U, U8 M" k3 c1 r; u
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|