|
|
原始插入数据如下:3 |5 B; V- N, r0 i6 U7 O' Y2 A5 c$ g) j
要求查询结果如下 :
2 t1 z5 ^' P- ]9 i ]# a2 H6 {! A1 X
8 l, q3 h( ^/ c5 M# t4 @1 Q# G+ {创建数据库、表* ^# X. j0 n6 w& ]- v0 S! _5 X
- create database tests;% r' T0 E8 ?0 L" R8 ?, x- S
- use tests;
) v S9 j" L3 Y! O* O+ z% k - create table t_score(
$ L0 x$ d1 U! z; o - id int primary key auto_increment,
. \! N' T, v. t3 J- ^( @ - name varchar(20) not null, #名字5 Y+ d! }* A) h
- Subject varchar(10) not null, #科目
, e7 _' k2 Z3 a! }; I4 R$ H8 ?1 \ - Fraction double default 0 #分数
& x. [! ^0 y8 S% }. x - );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES) b- b, M- ]2 J
- ('王海', '语文', 86),9 A) r1 O1 b1 ?; n
- ('王海', '数学', 83),6 [( }! [5 @- }* V3 `1 W0 F: T
- ('王海', '英语', 93),
; P5 M* g- K* }4 O2 } - ('陶俊', '语文', 88),% [4 ]4 y* _5 d7 P
- ('陶俊', '数学', 84),
7 _& y% o8 z# e8 p - ('陶俊', '英语', 94),2 {# C" ?+ M* g E6 V
- ('刘可', '语文', 80),1 E; z$ Z7 _/ g! C/ e0 Y$ O
- ('刘可', '数学', 86),9 _: a% K" l2 |7 X; p- \
- ('刘可', '英语', 88),
5 P, s6 [8 J; _! o - ('李春', '语文', 89),) Z+ i/ ~; H* \9 n3 x9 d* C( F+ S
- ('李春', '数学', 80),
5 T( _4 D$ T( @/ }$ w; j) ^ - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,3 L: t* \( M/ L. y
- sum(if(Subject='语文',Fraction,0)) as 语文,
+ M; F% u) q3 K# Q - sum(if(Subject='数学',Fraction,0))as 数学,
% t8 S, Y: W4 R - sum(if(Subject='英语',Fraction,0))as 英语,
6 L2 D; n* l0 H: n# A - round(AVG(Fraction),2) as 平均分,
, N) h' E& ?7 e7 D" d7 B - SUM(Fraction) as 总分' \1 r- O8 o0 ~
- from t_score group by name
5 W. F0 @$ Q! S1 D - union
6 l$ T; y1 M( h* s0 t# M9 V - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(
; x+ p+ ]% K# w' L$ H4 a( a - select 'TOTAL' as name,
% x2 L# X* n$ o1 J9 a - sum(if(Subject='语文',Fraction,0)) as 语文,
' @ @/ m( h* K/ |; j- Y - sum(if(Subject='数学',Fraction,0))as 数学,
2 u3 b4 M* U1 t) A: `$ e - sum(if(Subject='英语',Fraction,0))as 英语,9 Z5 T. L2 Q$ g. c% m$ f
- SUM(Fraction) as 总分1 Y) D. P4 R" V
- from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
$ M: f8 `' f0 `7 l - sum(case when Subject = '语文' then Fraction end) as Chinese,+ Z( ^* q7 _ T) p, g* N
- sum(case when Subject = '数学' then Fraction end) as Math," z* n; I& }# R% v
- sum(case when Subject = '英语' then Fraction end) as English,: q+ j7 W; ?0 B$ _
- sum(fraction)as score
8 {2 ?( L- H; Y1 b# q1 h0 i - from t_score group by name4 A7 b* p6 }" C+ o" S8 U: W* R
- UNION ALL1 ? A6 j- F \3 i4 v' H+ z! Z
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
0 y. z2 L9 {0 j4 U# U/ W - select 'TOTAL' as name,
# Y" }2 z6 k! Y4 h: k% w5 \ - sum(case when Subject = '语文' then Fraction end) as Chinese,
( t; [7 H) J' o/ a - sum(case when Subject = '数学' then Fraction end) as Math,
5 J4 P3 ]: |) _: G* p+ p6 i - sum(case when Subject = '英语' then Fraction end) as English,
0 [, t2 i8 e& o1 [' X8 B2 | - sum(fraction)as score
' M' E: s# D6 V4 h - from t_score group by Subject)t
复制代码方法三: with rollup - select
4 h, H7 Q% E m/ ^9 x8 x. J - ifnull(name,'TOll') name,
( s+ G+ ?1 U/ k1 x% X+ _1 U$ r - sum(if(Subject='语文',Fraction,0)) as 语文,2 `7 W: z3 V8 B. a
- sum(if(Subject='英语',Fraction,0)) as 英语,( z+ I" G/ |$ I/ P. m6 E
- sum(if(Subject='数学',Fraction,0))as 数学,& x% c8 j' e9 r1 |
- sum(Fraction) 总分
0 z! \9 b: u/ j: r6 ?+ ^/ c7 W1 v) j - from t_score group by name with rollup
复制代码查询结果如下: 6 P) j4 \, ] E. }- K7 x
+ x( _, L, G" M# U0 b* L' u |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|