|
|
原始插入数据如下:* @9 R! E7 V* ^+ C8 U
要求查询结果如下 :
3 t" f2 N: V7 ^- _# g3 D# ~8 { t2 X. U
1 y5 ?0 @# K* p% J ]. S2 l" n
创建数据库、表2 s+ n' F& Y% y1 x6 {- z
- create database tests;- w. w4 p+ D5 h2 f' O, o
- use tests;; i9 O% Q: v8 Z
- create table t_score(
* h- B' o6 X$ e/ F7 [; o$ ~ - id int primary key auto_increment,
0 j. T/ n% _9 i$ W+ f - name varchar(20) not null, #名字& a" R% }2 j: m- k9 t! N) s. W
- Subject varchar(10) not null, #科目& R- _3 k, g' y' M) p
- Fraction double default 0 #分数5 b' P8 i9 o6 g$ [) {2 z" S
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES1 b7 O" C1 c* `7 h* A' n
- ('王海', '语文', 86),' D+ t% U& Z% `+ Z0 d8 N
- ('王海', '数学', 83),
7 ~& \) ]. E, Y1 k% m3 r: ~ - ('王海', '英语', 93),
" d) T7 c& D M K+ I. z - ('陶俊', '语文', 88),
8 O9 s5 r# j( u+ A+ U( d& U/ } - ('陶俊', '数学', 84), }' O9 e8 V+ G
- ('陶俊', '英语', 94),: [ a. `/ ~9 J
- ('刘可', '语文', 80),
1 ~+ Q) ?0 E$ c9 x7 z0 l - ('刘可', '数学', 86),
' c: }: g7 j% ]+ q, a% B2 p+ b7 W4 _ - ('刘可', '英语', 88),) P3 P1 l0 p: w6 r! S' z
- ('李春', '语文', 89),
: n( z; g3 a; f3 g; G; @ - ('李春', '数学', 80),
. l% s# {0 ^# [8 `* h/ r& ?% W - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,' y) L* |: p9 z, R: _* W
- sum(if(Subject='语文',Fraction,0)) as 语文,+ Z9 {; s; h# {" W' O; l
- sum(if(Subject='数学',Fraction,0))as 数学,
: g1 t# p$ \/ H" c* K - sum(if(Subject='英语',Fraction,0))as 英语," W' H+ W* K% ]3 w; h) {1 D
- round(AVG(Fraction),2) as 平均分,
% [: C& A# P9 F+ {; y3 V3 r - SUM(Fraction) as 总分
: H/ G" G+ W! }0 {9 W/ ]6 e - from t_score group by name
! N( f7 q0 L. X1 X- c1 V - union# V: s6 g& I( o4 _
- select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(/ d4 [2 I K2 s8 k, H: N6 {
- select 'TOTAL' as name,
4 R6 A/ m& _$ Q - sum(if(Subject='语文',Fraction,0)) as 语文,4 p1 F0 g2 \ o7 C4 ?
- sum(if(Subject='数学',Fraction,0))as 数学, 6 v+ Q$ N5 L& \
- sum(if(Subject='英语',Fraction,0))as 英语,
" F/ F2 g+ x; F. T' S' |3 L: ` - SUM(Fraction) as 总分
2 r) c' d) U+ y5 S3 u3 g G - from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,2 @* O# j8 k) X+ o/ ]
- sum(case when Subject = '语文' then Fraction end) as Chinese,$ s% O) c" S6 m
- sum(case when Subject = '数学' then Fraction end) as Math,
% z2 z) O1 g7 g! |3 {" d5 Z* } - sum(case when Subject = '英语' then Fraction end) as English," ^- ^5 G5 o: O+ `$ C
- sum(fraction)as score
6 B7 V' [% s+ I4 Y" J - from t_score group by name
/ x* t1 N9 N) ~: g8 N2 b - UNION ALL
2 c3 Z7 P4 ?3 M- Z( ~/ w2 ^ - select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(0 w' s2 w' \9 g' H7 m3 O
- select 'TOTAL' as name,
+ i! S; R, z; _0 ?8 X& z" s4 d) O - sum(case when Subject = '语文' then Fraction end) as Chinese,
6 I: ?+ n/ O, x7 E$ M - sum(case when Subject = '数学' then Fraction end) as Math,
( p7 W# |6 ^1 E Q2 R& H - sum(case when Subject = '英语' then Fraction end) as English,
1 v* H# J; V$ i7 Y o) b% c e. Q - sum(fraction)as score' ~! n" \5 g& s* T
- from t_score group by Subject)t
复制代码方法三: with rollup - select 4 i: B9 H: r% F! i) Q
- ifnull(name,'TOll') name,. \! s1 \& C4 y% j5 S* P/ X2 v" i
- sum(if(Subject='语文',Fraction,0)) as 语文,
! Z' d7 P7 C9 V5 N, A* P - sum(if(Subject='英语',Fraction,0)) as 英语,
6 L& ]; }3 p1 q s3 X; O8 H3 Q - sum(if(Subject='数学',Fraction,0))as 数学, n' n7 h& W P6 P
- sum(Fraction) 总分
1 E) l- ]9 A4 Z* a4 d! N - from t_score group by name with rollup
复制代码查询结果如下: 7 P, Q1 y, x# v! u* {4 u
: n, x' J' P( ?. C |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|