|
|
原始插入数据如下:
$ B2 y" z" [# F$ ?+ j7 R, f2 d要求查询结果如下 :$ a# s z' H+ d/ z% B5 x
8 ]( e- U7 K* k# Q3 z7 p& |' o8 f0 Z2 y7 s& F9 W8 ^3 F
创建数据库、表4 C* s* w T+ ?% `: }/ v
- create database tests;
5 {5 f& Q* F- Q+ z; g" P - use tests;
, I6 w4 s& G- b I% l. ?- |/ ] - create table t_score(
9 o, i6 z9 |0 v/ o0 w - id int primary key auto_increment,& t& J; W& i1 I6 ~* M$ ^9 S; H
- name varchar(20) not null, #名字
! Q. p' P8 Z' C* W5 e - Subject varchar(10) not null, #科目6 j" N% S' ~: W: Z6 i
- Fraction double default 0 #分数8 z8 n; m+ ? N) v2 U9 j
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
6 f& B4 S+ c$ Q1 A) A0 K - ('王海', '语文', 86),
7 p% p4 D8 | ]% e& \) u( |! l - ('王海', '数学', 83),
% Q+ ]7 D, X, Z. I5 E - ('王海', '英语', 93),8 K) e3 r, y" _2 u6 L
- ('陶俊', '语文', 88),
* H4 }6 p3 t$ ?/ N" n: ] - ('陶俊', '数学', 84),
+ R: h& W. r$ q: p& M2 l7 F% G - ('陶俊', '英语', 94),4 r& ]4 h4 P$ }. L& H
- ('刘可', '语文', 80),
; f+ _# \6 a" W$ I0 O - ('刘可', '数学', 86),
7 t: F" ?! ]9 @2 d! Q# s4 K - ('刘可', '英语', 88),7 d4 [! N% B) v, T' r
- ('李春', '语文', 89), t/ h4 k4 u5 a0 J
- ('李春', '数学', 80),
) a& W2 x+ v7 A - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,; l8 V; @# I1 K/ _- y# V6 K
- sum(if(Subject='语文',Fraction,0)) as 语文,
4 G6 C: E. |) j0 W - sum(if(Subject='数学',Fraction,0))as 数学, ( E0 V9 p" D. K. V
- sum(if(Subject='英语',Fraction,0))as 英语,
0 L( i/ |6 J: a" H - round(AVG(Fraction),2) as 平均分,
! c5 j) \- }, Q) n, F - SUM(Fraction) as 总分" ~7 m/ B# d& l9 ]0 I
- from t_score group by name : y& v! a7 n* a3 e
- union
/ z: i/ o! W/ e$ \, M - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(' t* \! v# R3 [' D2 p/ _/ R
- select 'TOTAL' as name,
{7 \2 I& W' l! r% } - sum(if(Subject='语文',Fraction,0)) as 语文,
5 {5 A {/ t$ p+ S8 F% f$ c - sum(if(Subject='数学',Fraction,0))as 数学,
7 f& {0 H( ^+ ?8 C - sum(if(Subject='英语',Fraction,0))as 英语,/ ]& p. A0 f4 ^+ F) q; E- Y" w
- SUM(Fraction) as 总分
9 I# Q! V" b2 \' O) F1 W$ p B - from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,) \" M* e7 Y7 f8 `9 A
- sum(case when Subject = '语文' then Fraction end) as Chinese,
5 _! r5 c, l. Y! e: p; |7 ~6 Z - sum(case when Subject = '数学' then Fraction end) as Math,
0 r2 ~+ W& h" J+ Q - sum(case when Subject = '英语' then Fraction end) as English,1 Y8 p/ h- K7 y9 Y1 ?
- sum(fraction)as score
, v9 s% |- d0 Z* Z: k8 u8 g$ B - from t_score group by name' \3 S% n! T5 u" E
- UNION ALL7 b- D, F+ G9 S
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
% E7 U$ Y+ L( w8 U: t$ p; p - select 'TOTAL' as name,
2 w4 D' H1 _( S$ c( w" ~/ ? - sum(case when Subject = '语文' then Fraction end) as Chinese,
) q9 A8 A$ s- q3 Y h3 B - sum(case when Subject = '数学' then Fraction end) as Math,
5 e) T0 T* ?% K5 f& W7 H/ G: i N - sum(case when Subject = '英语' then Fraction end) as English,' G/ q! }! _/ H3 B. v9 I
- sum(fraction)as score
. {6 g; t9 s9 `) f+ M - from t_score group by Subject)t
复制代码方法三: with rollup - select . u g s, J: s$ [& V% |8 w
- ifnull(name,'TOll') name,
0 Y6 x2 [( I8 s+ k" n" a - sum(if(Subject='语文',Fraction,0)) as 语文,
8 _9 t/ n' ]) \ - sum(if(Subject='英语',Fraction,0)) as 英语,
7 d/ ]/ l8 ?# N1 u - sum(if(Subject='数学',Fraction,0))as 数学,6 [) C: t" X1 F) n: O! l
- sum(Fraction) 总分2 p! ]8 F2 y M2 u2 n) B8 d4 u
- from t_score group by name with rollup
复制代码查询结果如下:
j" K" T8 x$ _* t% e7 |1 B
7 N7 R6 ?" u8 J* k. t- N( N$ r0 r |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|