|
|
原始插入数据如下:
! o. k- p, V# F' K3 x) z0 _9 D要求查询结果如下 :6 Q4 [: V' j- F3 A2 ~2 Z
& J- v5 j/ c( j4 T
; ^; P1 T+ S- [, P" u7 q- f
创建数据库、表
5 u, Y4 m y7 [) n7 ^- create database tests;' P t, T8 d5 w- A, S3 b! {! f L
- use tests;" T; s: P- f% G+ ~
- create table t_score(
5 N$ _+ B. K$ L6 U/ s. Y - id int primary key auto_increment,
& r& I2 }* U. ^, D - name varchar(20) not null, #名字
. S* z8 g6 e" ~$ F8 q2 M2 W - Subject varchar(10) not null, #科目
0 m' T) A: A0 Z- q6 R - Fraction double default 0 #分数
* T& S2 t" \! N$ o% a- d - );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
: e( g, ?0 G3 K' B' o: h - ('王海', '语文', 86),
) O9 G1 E; {+ a* X- B5 } - ('王海', '数学', 83),
: d" @* g& w; {, N8 M7 h! c1 C( V - ('王海', '英语', 93),9 t) }6 T0 A. B9 _" P
- ('陶俊', '语文', 88),9 s: @& L6 @! f5 ^' R
- ('陶俊', '数学', 84),- t6 Q$ s. J- h8 D
- ('陶俊', '英语', 94),
1 O) F. j; Y, k2 { - ('刘可', '语文', 80),
! j+ L: r/ g7 H* j - ('刘可', '数学', 86)," p. u5 z5 k6 y! v& e( ]3 K; r
- ('刘可', '英语', 88),6 @0 a, A6 R' n8 X
- ('李春', '语文', 89),5 k/ m4 [! U9 w
- ('李春', '数学', 80), y4 L8 D4 v& `* N) N- h$ Q" b
- ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,% h# Q, {, t- `9 L2 q
- sum(if(Subject='语文',Fraction,0)) as 语文,
) e: D& l2 D3 j: y- D# }1 I0 { - sum(if(Subject='数学',Fraction,0))as 数学,
- J* s- m' r! Q, c; A' @6 ?) x - sum(if(Subject='英语',Fraction,0))as 英语," w. A( B4 B6 S$ @ w
- round(AVG(Fraction),2) as 平均分,# g7 a1 E. [" a. u" X0 I. {
- SUM(Fraction) as 总分
/ C. }0 E8 v! I" `9 N! b# f - from t_score group by name * p; { [) X. O. h
- union
- d# P J; t$ i - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(
G2 _; n! v1 s1 L( f( F - select 'TOTAL' as name," g& i+ M4 }: |4 |9 l& K1 Q1 _
- sum(if(Subject='语文',Fraction,0)) as 语文,' B: v& N5 g! ?9 a3 g4 M4 Z5 T
- sum(if(Subject='数学',Fraction,0))as 数学, # \& R% j/ m: H4 W% o# U* e
- sum(if(Subject='英语',Fraction,0))as 英语,+ k$ e, I5 P, p
- SUM(Fraction) as 总分- u% M c$ C- G7 [& ?9 m6 y
- from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
5 W2 E( f4 s5 e) Q6 Y. T - sum(case when Subject = '语文' then Fraction end) as Chinese,
) V+ x# v3 Z, @# C" _0 i. ? - sum(case when Subject = '数学' then Fraction end) as Math,' h2 v8 l1 Q4 B4 E! v$ H
- sum(case when Subject = '英语' then Fraction end) as English,
& t; U* I3 r& n6 y8 k3 N - sum(fraction)as score. C% ^5 T7 b4 h4 E* o
- from t_score group by name
! P2 [6 ?/ d8 {/ F - UNION ALL: K& o9 v' E9 i* \$ q, \. M* G
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
% u% L; U6 H0 }( l+ L/ ], N$ h - select 'TOTAL' as name,
: a: p) W T" n7 f - sum(case when Subject = '语文' then Fraction end) as Chinese,4 b' ~7 @3 | m1 }3 K: T
- sum(case when Subject = '数学' then Fraction end) as Math,
" ^$ x {$ ~) u) @" g n/ R' V - sum(case when Subject = '英语' then Fraction end) as English,6 `8 t6 x# v8 a
- sum(fraction)as score
. I) \( [4 y5 p5 f3 _/ P. B - from t_score group by Subject)t
复制代码方法三: with rollup - select
& `1 i- ~6 S. T/ V! M6 Y$ | - ifnull(name,'TOll') name,
0 ~ f1 B5 E& w% m1 B9 l - sum(if(Subject='语文',Fraction,0)) as 语文,
) m y1 B6 }' \6 O4 b2 J - sum(if(Subject='英语',Fraction,0)) as 英语,2 V( j0 \+ |' ^6 m3 t* {5 E/ Y
- sum(if(Subject='数学',Fraction,0))as 数学,
' u- {' `1 J( D - sum(Fraction) 总分3 L5 W2 g7 l, T
- from t_score group by name with rollup
复制代码查询结果如下:
% a9 S% K5 {' E/ f8 ^4 `& p
5 d' n* W7 n+ m! E; H0 C |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|