|
|
原始插入数据如下:
% G/ i" B, r1 E4 m, L要求查询结果如下 :, G) \9 D7 r) [; y# t2 ?; E2 u
! S. m: b! h! X) J* z" Z- E1 Y7 D* G
# {4 r" v0 h# V
创建数据库、表6 V/ p: m8 u: A; h! ~7 t* ^
- create database tests;+ g) ]5 ?, G& R8 o
- use tests;, W5 p% h- K3 ~
- create table t_score(' e& N% ?' ^1 y& M
- id int primary key auto_increment, l7 T" N7 M) ?$ Z
- name varchar(20) not null, #名字
1 U! r8 X( u" \5 { - Subject varchar(10) not null, #科目, E; S& J3 }. W2 A7 z- X
- Fraction double default 0 #分数
9 ?- w- Q; t% V( T# }& t9 a - );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
; d* f9 O# E0 v7 q, a- r- Y - ('王海', '语文', 86),+ ^ y: L/ w T6 i4 p, R! [
- ('王海', '数学', 83),$ _+ j. ^" i9 F' [5 v1 M5 ]8 h1 ~7 T
- ('王海', '英语', 93),
6 F3 x9 E- C8 F1 ]+ ]" p& b+ h - ('陶俊', '语文', 88),( h" }0 {. N# Q
- ('陶俊', '数学', 84),
1 }3 b$ Z6 b: d. u$ j$ ?! @ - ('陶俊', '英语', 94),, A( }$ y: W& z1 g1 Q* q
- ('刘可', '语文', 80),
' ` H" }% j5 x& @- { - ('刘可', '数学', 86),
$ }" y4 _; }# e1 u7 s Y - ('刘可', '英语', 88),$ i9 {% O& z9 v# ^2 T
- ('李春', '语文', 89),
! ]8 a4 C5 l. Q2 B# y! B) ^ - ('李春', '数学', 80),9 P r3 }1 N5 b) l
- ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,( k t+ {0 h2 V
- sum(if(Subject='语文',Fraction,0)) as 语文,! c" l) c( p% c& @! L4 X
- sum(if(Subject='数学',Fraction,0))as 数学,
9 P& y! T! @3 G/ F! @/ p - sum(if(Subject='英语',Fraction,0))as 英语,
4 k4 d/ H) p g8 j. J9 o1 m - round(AVG(Fraction),2) as 平均分,( P& l1 k+ z/ Q' r
- SUM(Fraction) as 总分- B* h# Q" |* Y! f
- from t_score group by name
/ H" J. e |6 d6 P# l1 Q8 I - union
7 P7 V3 D8 _5 R- l X$ }5 S9 \ - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(4 T5 |' G! w' i' b
- select 'TOTAL' as name,- `4 n }! v+ P8 y9 N3 y% f
- sum(if(Subject='语文',Fraction,0)) as 语文,
+ R9 a9 P9 d# _2 m - sum(if(Subject='数学',Fraction,0))as 数学, & b. y# E; ^" }8 h- {1 @+ w' v
- sum(if(Subject='英语',Fraction,0))as 英语,$ l: R6 O9 g5 \5 f+ G- e U
- SUM(Fraction) as 总分: v6 _6 {9 L' b
- from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,* A+ V* |& m2 K( u1 Y' \/ s/ w
- sum(case when Subject = '语文' then Fraction end) as Chinese,
. b" t# H2 J, B" k - sum(case when Subject = '数学' then Fraction end) as Math,4 H# e' D; |" J5 @; J
- sum(case when Subject = '英语' then Fraction end) as English,+ A; W0 `% u- }9 U- O( r. P# s
- sum(fraction)as score. R* }* z: \; {3 I3 A- v/ X* A+ r2 C% j
- from t_score group by name
, F/ }5 H- l2 B$ [) P - UNION ALL' P% Q* _( Q# B& Q1 l0 G5 N
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(5 x: x) m7 A6 C3 h
- select 'TOTAL' as name,9 k% V9 F9 n5 g/ w2 M
- sum(case when Subject = '语文' then Fraction end) as Chinese,7 f7 |% D! X. F* |4 f
- sum(case when Subject = '数学' then Fraction end) as Math,3 h6 |* h/ `* `
- sum(case when Subject = '英语' then Fraction end) as English,
1 |+ _, u& x" R* v/ G - sum(fraction)as score m5 X3 a L$ F: a5 N- \+ e) O% G
- from t_score group by Subject)t
复制代码方法三: with rollup - select 0 d: e6 B3 S5 m$ i, m: m
- ifnull(name,'TOll') name,
5 z, W9 e3 k+ |+ H: E3 Q) H - sum(if(Subject='语文',Fraction,0)) as 语文,7 J7 f& D: V. U7 K7 j) n
- sum(if(Subject='英语',Fraction,0)) as 英语,
# X5 `* W5 p, t) Z' x% f - sum(if(Subject='数学',Fraction,0))as 数学,
M! E& W3 I& [/ E# t* T- j - sum(Fraction) 总分
* u0 _7 v$ A$ P% k3 l" f1 | - from t_score group by name with rollup
复制代码查询结果如下:
+ P$ L- O6 ~1 _0 e; I7 U- o( F; B7 m& R! Y( S/ w, l1 H
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|