|
|
原始插入数据如下:. I7 S: |9 o9 F! h$ O8 h
要求查询结果如下 :8 R5 e: b* B- u( ]3 I) D m7 C
0 l1 E4 w2 P4 n7 z( a: [ Q
/ @' w* T6 P9 A; U1 Q# Z
创建数据库、表# ]1 c* w6 R3 O" j* c( e
- create database tests;+ J! P4 z; {/ i" ~) w( Q
- use tests;7 E H. z- U; A
- create table t_score(3 x: m6 {1 @# Q5 d" F' n
- id int primary key auto_increment,8 H. V) A% `& S+ |# q
- name varchar(20) not null, #名字( Z' Y2 h8 x3 a l) {
- Subject varchar(10) not null, #科目0 z7 ^9 z2 Y1 j/ G" M
- Fraction double default 0 #分数
6 [: Q# o7 p7 s - );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES, G; |" A% k; J" V7 k
- ('王海', '语文', 86),1 M5 Q0 x- V- s! j9 R
- ('王海', '数学', 83),
- b5 _0 M0 S6 p6 V3 | E - ('王海', '英语', 93),
2 o) [# ^8 N! A! I - ('陶俊', '语文', 88),6 i4 p5 c( Q/ P+ z) r# N
- ('陶俊', '数学', 84),
. a. D, \7 o" |+ y( v - ('陶俊', '英语', 94),. D5 Z* e0 n# k" k
- ('刘可', '语文', 80), _) y5 o$ i# K# o
- ('刘可', '数学', 86),0 i& n7 o- ]" y" H7 B& `( Z
- ('刘可', '英语', 88),
- r+ j H9 _! [# E3 G - ('李春', '语文', 89),5 {% T5 b9 [. }
- ('李春', '数学', 80),
& A5 I9 a* W. u& g1 M9 C1 P - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,
% h O* R+ `4 A- s - sum(if(Subject='语文',Fraction,0)) as 语文,
* f9 u6 k5 S% S4 t - sum(if(Subject='数学',Fraction,0))as 数学, ; `& F# U5 o, W& D1 D V( C$ y
- sum(if(Subject='英语',Fraction,0))as 英语,+ ?- E- g9 L9 Q; R! n. J. X- r% M
- round(AVG(Fraction),2) as 平均分,
7 }) G8 Q9 L% b& ` - SUM(Fraction) as 总分! r) [ J' b! l, d* ]( E* |& k* I
- from t_score group by name , x" [7 h& u5 \, ^7 |# |
- union
' E+ A/ v' U# i) g4 o - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(: D& K6 K' m4 p) X1 ^( g0 y9 D
- select 'TOTAL' as name,2 u0 T" z, g! ]$ u) O
- sum(if(Subject='语文',Fraction,0)) as 语文,
" ~' O0 [3 Y4 F* X( |: n - sum(if(Subject='数学',Fraction,0))as 数学, ; |2 y8 Y) i) [ |6 d* o- |' L
- sum(if(Subject='英语',Fraction,0))as 英语,
\5 k w; w* h3 i2 K% s# U - SUM(Fraction) as 总分4 T% b2 N2 f) d& [6 _; J. _
- from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
. p5 b# k4 p: k$ J$ A5 h - sum(case when Subject = '语文' then Fraction end) as Chinese,9 N" t+ v A5 @( J; [1 g2 [
- sum(case when Subject = '数学' then Fraction end) as Math,8 I0 h) R4 G, f, P
- sum(case when Subject = '英语' then Fraction end) as English,
$ I& Q. T- U6 P4 y+ A - sum(fraction)as score
% q/ N4 ?" S( ~ Y S; _ S - from t_score group by name; T. b: {- x+ m" \8 ^ @- T
- UNION ALL
: O" b4 n. l8 l7 _/ o2 r) [, ~2 j - select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(, l/ @. B9 X) Z
- select 'TOTAL' as name,
; F8 `6 ` _8 d7 V8 j' O: I - sum(case when Subject = '语文' then Fraction end) as Chinese,
! ?7 [4 A9 C; u2 } - sum(case when Subject = '数学' then Fraction end) as Math,; C1 Q4 q5 ]) } q! s
- sum(case when Subject = '英语' then Fraction end) as English," g6 y& c" m4 S0 s5 }- l5 R
- sum(fraction)as score
0 ]3 h( `' s q8 k: r$ v' a( r - from t_score group by Subject)t
复制代码方法三: with rollup - select
( L# c2 f/ {6 h& s. S- ?" o - ifnull(name,'TOll') name,* A- C% _, d9 V" u+ y: [; j5 y
- sum(if(Subject='语文',Fraction,0)) as 语文,
8 _( m) T9 S7 K% J3 ` - sum(if(Subject='英语',Fraction,0)) as 英语,
' M! u6 u1 `' k - sum(if(Subject='数学',Fraction,0))as 数学,( l) M1 h/ d3 C, O; v
- sum(Fraction) 总分- u5 E) j$ W$ W
- from t_score group by name with rollup
复制代码查询结果如下: ; o6 h! [* a8 d( ^9 N# z8 K
L* O' }1 {0 d, A4 t: v& p: k |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|