|
原始插入数据如下:
# H7 O5 {' t- e9 \' z要求查询结果如下 :: ]- ~7 u- v) p N; l' o% M0 h; n! h
8 v) U: S" b1 a% v7 A$ j' M6 [" ]' K- x9 O x
创建数据库、表) E% U/ X, b* ^! j8 I# ~
- create database tests;- s! c/ E- X: ^" ^8 Z% q
- use tests;
* x" Q9 b2 m. l0 j$ y7 ~ - create table t_score(
- ?1 N, ?! v3 ` - id int primary key auto_increment,2 B' ?; \6 c- I, T1 J
- name varchar(20) not null, #名字
" \9 n- E) K; P1 P" ?/ H g/ }- c - Subject varchar(10) not null, #科目
" q3 J% @* x+ c- }5 L. ?6 | - Fraction double default 0 #分数
: Z- V$ c }, W! h - );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES( f1 ? v8 }% |8 e
- ('王海', '语文', 86),
: X9 Y7 u+ `3 {7 u% X$ M - ('王海', '数学', 83),7 j1 s5 i3 {1 R9 b
- ('王海', '英语', 93),' R; _; b/ e" e2 S- t1 z
- ('陶俊', '语文', 88),
1 s& U9 e6 T. J" C. l2 k0 A; s - ('陶俊', '数学', 84),1 \; ^* H6 }- K1 {! M9 r$ w, }! g
- ('陶俊', '英语', 94),: K) D8 Q2 x8 Y8 s) O9 m9 p! ?5 A
- ('刘可', '语文', 80),, Y# a! S0 ]" v- ]/ F
- ('刘可', '数学', 86),
! B* ]% m: Y9 K9 K0 \ - ('刘可', '英语', 88),
0 i/ I, w4 J8 [8 ` - ('李春', '语文', 89),% q7 b# O* ?) |) E
- ('李春', '数学', 80),
% |+ k# F# F2 |- e5 r# D - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,
! Z3 k0 s8 Z$ c - sum(if(Subject='语文',Fraction,0)) as 语文,
. {. X6 ^# I. B! O. Y - sum(if(Subject='数学',Fraction,0))as 数学, o* V+ M) X5 M' f' S2 }
- sum(if(Subject='英语',Fraction,0))as 英语,3 w3 w D* L) w
- round(AVG(Fraction),2) as 平均分,5 |" L f" G9 T0 @7 F. L* C4 `; O* E7 U
- SUM(Fraction) as 总分
" H6 R2 U! }1 k+ K/ M$ z1 b - from t_score group by name
* ~2 w) d- Q% z, k# q" c7 a8 D - union8 \( i9 @9 ~: T+ j1 S' J% D: v$ `
- select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(
+ V. q. G+ z+ n/ W' a6 A - select 'TOTAL' as name,
( x; N1 s" C( J8 v: e8 p+ r - sum(if(Subject='语文',Fraction,0)) as 语文,
2 x5 d; |( Q& X& i - sum(if(Subject='数学',Fraction,0))as 数学,
2 w" G( S% l6 R. w/ @, B - sum(if(Subject='英语',Fraction,0))as 英语,
5 {0 O' a6 x }8 m" D! H X7 B- b/ A - SUM(Fraction) as 总分
8 d; L9 B+ u* b, e4 | - from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
% G9 C9 }) I$ f3 ` N! D& [ - sum(case when Subject = '语文' then Fraction end) as Chinese,( [$ O! V. x: o! M {& O
- sum(case when Subject = '数学' then Fraction end) as Math,
* @( z0 z3 J, e7 k - sum(case when Subject = '英语' then Fraction end) as English,& d# h% W+ u2 G% B! I" f; r( O
- sum(fraction)as score3 Z/ O. m- M5 E G& j7 ?3 t
- from t_score group by name
( G( k6 B" f1 d7 X - UNION ALL
" `3 z* L4 Z i7 q/ w; }& o3 q - select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
8 e- j' I `- W* l3 S- P6 f! ?8 ~ - select 'TOTAL' as name,
* C, \5 }" x/ _& D' p% s2 ] - sum(case when Subject = '语文' then Fraction end) as Chinese,+ L& Y! q" x+ R
- sum(case when Subject = '数学' then Fraction end) as Math,* a' i6 }6 M( g& r
- sum(case when Subject = '英语' then Fraction end) as English,' i/ O8 v7 O6 g) C; J
- sum(fraction)as score
5 y) f* A: e) _% H - from t_score group by Subject)t
复制代码方法三: with rollup - select
0 f+ D3 D) y% M) r$ D8 w4 N1 {- d - ifnull(name,'TOll') name,
; y \; v ]3 v0 d7 t: b - sum(if(Subject='语文',Fraction,0)) as 语文,1 m' {$ l! e% I3 r
- sum(if(Subject='英语',Fraction,0)) as 英语,
( t% T8 r( C1 t' M$ r+ g - sum(if(Subject='数学',Fraction,0))as 数学,
& T6 M! C+ a( z: j( `. K - sum(Fraction) 总分1 J b3 o/ D; G& E8 X/ g
- from t_score group by name with rollup
复制代码查询结果如下:
5 ~. O7 y- s/ @
7 |8 i6 k) g' b: @# Q* S8 }/ o |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|