|
原始插入数据如下:
9 s" u/ a) a2 F要求查询结果如下 :5 E! i" ]9 K! P" e5 B8 P; |* F
* D, j& G. z* ^% s, q% w9 m5 X3 R3 E$ O
8 f1 M5 Z, j( c6 N7 X+ s
创建数据库、表& Q- E# s4 [! z2 L3 j- K- F: i
- create database tests;
) \" o# y7 z6 W! q& _7 o* `! B* b - use tests;
4 n9 d( a5 l9 F+ ?" ?+ q - create table t_score(
/ @" c. B* ]8 E6 U4 x - id int primary key auto_increment,
1 ]6 p8 A, F8 W6 u: O! R9 V, G$ o) J - name varchar(20) not null, #名字
, K: F1 X# d) ?! l% [8 X6 R - Subject varchar(10) not null, #科目
$ T9 ~6 | w2 }9 i9 q - Fraction double default 0 #分数
/ {4 Q+ c& M/ F& p' w - );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES( n( y5 C) t5 a3 f
- ('王海', '语文', 86),
$ Q" R: Q: ^& H7 Y - ('王海', '数学', 83),
9 g! }4 u4 E ]& h" h7 S4 c7 E - ('王海', '英语', 93),2 x4 \$ C: t$ ~
- ('陶俊', '语文', 88),: ]% I& e! U1 c j
- ('陶俊', '数学', 84),
- ]; |& K+ h! e# [ - ('陶俊', '英语', 94),- _4 ^6 ^+ ^8 o8 l* F; T
- ('刘可', '语文', 80),
8 h% L" ?. F2 ^" e a - ('刘可', '数学', 86),
: l) d8 J* Y3 L# Q. U9 t* e) y - ('刘可', '英语', 88),7 H( w, ^$ `3 T+ g/ b5 ^
- ('李春', '语文', 89),
) h! F- |# @& B) j - ('李春', '数学', 80),. D* |. @$ V+ T6 ~+ y6 e
- ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,
# j( D: ?: o: V* E3 l% i7 E - sum(if(Subject='语文',Fraction,0)) as 语文,4 p7 `3 m/ l. X7 w
- sum(if(Subject='数学',Fraction,0))as 数学, 5 b" R; T9 p; e# h
- sum(if(Subject='英语',Fraction,0))as 英语,# K& ~8 l8 K* N! X) o* s
- round(AVG(Fraction),2) as 平均分,* j! ]; h6 f8 a' T
- SUM(Fraction) as 总分
/ Z- `9 P; Y$ R: l' H2 K2 A6 O3 v; ` - from t_score group by name 7 x8 Q: ?8 ]' ~. T2 D1 v* y
- union; u: t7 O; R3 r6 b
- select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(, \! x4 T( }9 p9 i* z7 N3 {
- select 'TOTAL' as name,4 R' C; p7 r. B7 r' F
- sum(if(Subject='语文',Fraction,0)) as 语文,
2 S2 V( \' T# _& ~8 G3 c. A - sum(if(Subject='数学',Fraction,0))as 数学,
6 G; w I# g( z3 {1 _. I) ~) R - sum(if(Subject='英语',Fraction,0))as 英语,$ s% F# I" ~7 \+ }! v
- SUM(Fraction) as 总分
9 `0 P1 U% }4 t1 Z - from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,0 r! c( ^4 q# D& b, Y3 k# a* O: n
- sum(case when Subject = '语文' then Fraction end) as Chinese,7 W2 Z: ^: C) C0 R
- sum(case when Subject = '数学' then Fraction end) as Math,6 u: l) r9 _& o; g2 Y/ q- S
- sum(case when Subject = '英语' then Fraction end) as English,: I' g3 l( s' a5 _/ f7 G
- sum(fraction)as score
$ `; u& _- Q' m! j- y - from t_score group by name
0 ^0 N7 x M9 Q' U( j1 g - UNION ALL. E) q1 A% t- q0 e4 K5 b, G
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
) {5 q \6 {" B o2 L$ E7 z - select 'TOTAL' as name,6 P3 U' X5 _# e6 s3 H) {7 @
- sum(case when Subject = '语文' then Fraction end) as Chinese,
( w( U& o% u& S9 Z3 R8 G - sum(case when Subject = '数学' then Fraction end) as Math,
4 { d2 y* S; Q9 { - sum(case when Subject = '英语' then Fraction end) as English,
: S4 e( Z4 L5 j - sum(fraction)as score' |3 o* ^8 R; u6 B, b
- from t_score group by Subject)t
复制代码方法三: with rollup - select
; k* H& K8 F6 [ - ifnull(name,'TOll') name,/ k1 ]) @9 K/ k$ D/ {3 O
- sum(if(Subject='语文',Fraction,0)) as 语文,6 P+ i) U T8 C4 z
- sum(if(Subject='英语',Fraction,0)) as 英语, D# I+ T g! ]% D
- sum(if(Subject='数学',Fraction,0))as 数学,
8 k+ m! m) ]. ^& ?+ ~7 f - sum(Fraction) 总分) u0 E/ C: |5 \7 F6 _# _3 G5 s6 w
- from t_score group by name with rollup
复制代码查询结果如下:
6 U! o% D C* c/ l$ o' W7 T; E- K1 p
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|