|
|
原始插入数据如下:
. R8 ?% \/ A+ H! \6 n: y. C要求查询结果如下 :& Y C% P& ?4 z. D; y
+ _% p8 s9 e+ j% p/ n0 V, U
4 j2 _' L/ E6 d! g; b5 o% X6 t创建数据库、表
/ f4 o1 o/ V4 I# S4 U$ T. V- create database tests;3 }- ^6 n7 j7 V3 J' _- X: J
- use tests;) }3 }: A3 u- V2 R3 U" t8 {
- create table t_score(
, F2 w% L8 E8 @: L/ I" {9 R9 A - id int primary key auto_increment,; O9 Q2 F# Y' e
- name varchar(20) not null, #名字
4 |) n4 d' l9 u7 [8 v/ s$ u - Subject varchar(10) not null, #科目! a. G% i. \& w4 ^7 O) ~/ F
- Fraction double default 0 #分数" A1 s2 s8 S' U- X
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
( U3 x. n8 n! Q p - ('王海', '语文', 86),
# f% d0 ?. X/ m - ('王海', '数学', 83),
, P( ?5 o5 W' ^. m1 K8 g" x% m) r - ('王海', '英语', 93),
; C/ o, T$ \! v7 w. P - ('陶俊', '语文', 88),( X# g8 ? W% L" D8 S, d% V
- ('陶俊', '数学', 84),
- Y& W! M7 y0 p( Q" \ |3 F# D( s Q7 _ - ('陶俊', '英语', 94),
" y) X# Y4 m- L& D. Q( V - ('刘可', '语文', 80),1 ^4 Z7 ^+ H! O* J% i1 @* A
- ('刘可', '数学', 86),, ~; ]+ s! n$ x) O& U6 F
- ('刘可', '英语', 88),
5 i7 e# X/ }0 s - ('李春', '语文', 89),, ^/ N3 c! {: e5 F" X
- ('李春', '数学', 80),
" @+ w# ~ U) w3 r2 ^ - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,8 D2 U3 `# y+ F; t2 O, l
- sum(if(Subject='语文',Fraction,0)) as 语文,
# {2 E( p# ^- P, J - sum(if(Subject='数学',Fraction,0))as 数学,
9 f3 `& C* R7 @1 ? - sum(if(Subject='英语',Fraction,0))as 英语,8 e; n2 x& }. A
- round(AVG(Fraction),2) as 平均分,
7 Q' B0 |3 g2 |5 N1 ~ - SUM(Fraction) as 总分% A6 j" c/ S" A% b& L1 y2 F, C/ s
- from t_score group by name
+ m4 }% l8 b, Z9 S2 g0 R - union
/ a8 W0 ~, ?" a, d/ l1 _' } - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from() p# J9 F5 Z4 o+ s u7 ]1 B
- select 'TOTAL' as name,: o0 O2 A8 t9 r5 q# V
- sum(if(Subject='语文',Fraction,0)) as 语文,
) g# f- Z+ Z4 i2 e+ X5 k- ]% u - sum(if(Subject='数学',Fraction,0))as 数学, 4 u% j! y/ V+ M9 F) e
- sum(if(Subject='英语',Fraction,0))as 英语,
$ e8 i0 m- x# }% e# o. b; U. } - SUM(Fraction) as 总分
) A: l; F# h. y4 A - from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
. Z$ ]* E& k) K; g2 S: A9 U/ \ - sum(case when Subject = '语文' then Fraction end) as Chinese,
' R, X4 B! ]9 p6 B$ d5 k+ R ` ] - sum(case when Subject = '数学' then Fraction end) as Math,
. f: ^; g# n% Z* Q% H. X4 z, }; ?2 b - sum(case when Subject = '英语' then Fraction end) as English,
* K Y. x! _) T' |. }4 U# h" [ - sum(fraction)as score- q6 v, R: ]% {! A. ]2 `7 R
- from t_score group by name
* f. N# T- U4 l, ~# T3 C2 ?0 a - UNION ALL3 D3 M& z# ~) U, c- R! d; Q
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(& e! K- A5 l& L! I4 l! M& O8 S% h' `
- select 'TOTAL' as name,2 Z3 b. x1 |- f8 _2 ~
- sum(case when Subject = '语文' then Fraction end) as Chinese," `3 K/ O$ y* r; p6 t
- sum(case when Subject = '数学' then Fraction end) as Math,/ t3 l/ @/ t: n; H6 T$ N ~. l G+ ]" r+ @
- sum(case when Subject = '英语' then Fraction end) as English,
, b: ^9 |2 N2 b# p9 p4 _% _* l5 {) J - sum(fraction)as score
" R$ D! \; P; d1 r+ ?) r! q" T+ e x/ s - from t_score group by Subject)t
复制代码方法三: with rollup - select 2 V6 T# O1 U+ {& J
- ifnull(name,'TOll') name,+ Q6 p8 |+ @6 M: Q. u" R0 ~
- sum(if(Subject='语文',Fraction,0)) as 语文,# |/ X" F7 G/ I1 [0 [
- sum(if(Subject='英语',Fraction,0)) as 英语,
7 g3 @8 q# F5 C7 A8 b - sum(if(Subject='数学',Fraction,0))as 数学,
% Z3 S2 J' N& O+ h0 s - sum(Fraction) 总分: |8 `5 h" D$ G6 w9 m* h( i3 b
- from t_score group by name with rollup
复制代码查询结果如下: 6 o; n. p5 k y; p; d
/ L" X* v! }5 N# W9 b* a |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|