|
|
原始插入数据如下:: Y$ S) ]* q ~0 K: B! C- L
要求查询结果如下 :. h- [- ^4 S+ J, O. T- w7 Q
- I3 o8 q2 S. o
a( j M; V0 L! B创建数据库、表6 I' e" X. L; W
- create database tests;
8 }& `2 ^' K0 ?2 I6 G/ A - use tests;
; g, I. c6 G* ?& P& ?6 ` - create table t_score(( {: ^1 p: w6 I6 `
- id int primary key auto_increment,
+ a, i0 S! f! G: u( H2 ` - name varchar(20) not null, #名字8 {% u% x9 q+ f4 s' s
- Subject varchar(10) not null, #科目6 X5 e+ O2 V/ O) b6 J0 O) c3 l2 Z/ i
- Fraction double default 0 #分数
- g- H* ^$ r1 \# W1 Q! W9 @ - );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
7 b7 W* E5 A: X6 i - ('王海', '语文', 86),
$ G( V N: P- ?9 R1 w - ('王海', '数学', 83),& c0 ]) i! I6 g! r |
- ('王海', '英语', 93),
5 P+ x) k3 F: E4 \ - ('陶俊', '语文', 88),3 y8 O5 u- W9 l! \& R! ^; Z
- ('陶俊', '数学', 84),9 y, v/ b3 ], w+ Q M b
- ('陶俊', '英语', 94),
- W6 F7 @6 |, f2 {7 T9 K: s* J - ('刘可', '语文', 80)," U5 g$ F ^8 e; U5 R0 t, V5 W
- ('刘可', '数学', 86),: ]7 \1 g0 _6 L7 x6 r+ E9 e
- ('刘可', '英语', 88),
" e5 @9 ]1 `% j% k7 t- M) J - ('李春', '语文', 89),8 K3 }6 P* x. \& X
- ('李春', '数学', 80),) D% v* H7 l9 N8 N2 g5 c
- ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,1 s3 L( a& |6 P$ O! I
- sum(if(Subject='语文',Fraction,0)) as 语文,% W$ R7 J0 B2 F2 B! P1 ?6 B
- sum(if(Subject='数学',Fraction,0))as 数学, % j8 r3 @& e1 P/ [' m7 T3 \8 k3 C
- sum(if(Subject='英语',Fraction,0))as 英语,& a9 V2 H# n; |( v8 |
- round(AVG(Fraction),2) as 平均分,
6 `+ E- C" ^# m7 O3 I' m0 \ - SUM(Fraction) as 总分9 z) |. I" x& i! U
- from t_score group by name & Q+ o2 F( R% {- I5 m6 I
- union
( Q1 r2 `/ \3 A7 z3 P- ^$ U - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(
) x- `9 r' {" |* C. a$ A# R - select 'TOTAL' as name,
1 |! k( }$ t. ], l - sum(if(Subject='语文',Fraction,0)) as 语文,
, u+ P5 |! z# ^) g9 s3 O6 V6 ` - sum(if(Subject='数学',Fraction,0))as 数学, & u4 S1 D6 P8 T- q' ]" W
- sum(if(Subject='英语',Fraction,0))as 英语,
: B) h7 H" L: u! g - SUM(Fraction) as 总分2 \6 q) b/ _+ M: ~4 H" A
- from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,: l3 W' T( Z T, l: r4 R* r6 p
- sum(case when Subject = '语文' then Fraction end) as Chinese,# u1 H& ]* n4 |4 B6 m8 U2 p( K# w+ D
- sum(case when Subject = '数学' then Fraction end) as Math,
9 Q8 Q7 V: J- y/ e - sum(case when Subject = '英语' then Fraction end) as English,
8 }& s' }2 Y# b7 o) I( w - sum(fraction)as score
l, W) W% ^$ s% m8 Z& w- K - from t_score group by name4 z8 `& t8 g/ t# h% E, s
- UNION ALL
( S0 E9 W1 d( o) f; N2 y - select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
) F5 x' x$ w' D) F& n - select 'TOTAL' as name,( s% g* R7 Z U1 [- n! Y9 H
- sum(case when Subject = '语文' then Fraction end) as Chinese,
; s9 m- m- s) M) f+ B# F" C - sum(case when Subject = '数学' then Fraction end) as Math,
8 W( R* j& q, G - sum(case when Subject = '英语' then Fraction end) as English,
F% q% ^; F0 L# R; n" q) ^+ y0 c! A; j - sum(fraction)as score
# t( s. f2 U! s: m. Z) p - from t_score group by Subject)t
复制代码方法三: with rollup - select
6 h6 k5 w, [( h R9 T$ `8 y - ifnull(name,'TOll') name,
3 @, C6 [; S# q( ~3 b1 S4 Z: f - sum(if(Subject='语文',Fraction,0)) as 语文,2 Q: @1 K i5 n( q
- sum(if(Subject='英语',Fraction,0)) as 英语,3 U- p( O# a' L( l; o: W1 x
- sum(if(Subject='数学',Fraction,0))as 数学,0 N9 A; |/ C4 w: N+ O
- sum(Fraction) 总分, E6 j. @* P& y3 B
- from t_score group by name with rollup
复制代码查询结果如下:
- l6 f N! e: g0 o
* V' q D% y8 _6 x& } |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|