|
|
原始插入数据如下:, O) D6 R; b. V( N1 J8 a
要求查询结果如下 :0 ]5 ^' v( e* s$ O
( m. Y; C# o2 ^6 A& T1 S, j
' W, q* {4 _6 e+ Q v' Z
创建数据库、表; J5 S, }/ W9 R, |1 z# p4 W$ _
- create database tests;: @! `- F; v% r7 T# s) @9 M% o0 `
- use tests;$ a/ {6 E" a7 d! ?
- create table t_score(
a1 Y& m, O/ S8 S& Q - id int primary key auto_increment,
. x G1 l! c# I4 n. B9 H! j - name varchar(20) not null, #名字
4 D& V. s3 ^1 f) U - Subject varchar(10) not null, #科目
g$ @9 e9 ~. @ - Fraction double default 0 #分数
; Y" C* ^/ q2 E% i# S) a9 | - );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
G5 A' u/ e) B9 y - ('王海', '语文', 86),# o1 G! Y9 ^' c7 s
- ('王海', '数学', 83),
8 ~/ T% a- z/ Y1 @6 ]5 n# d - ('王海', '英语', 93),
% E) J# U( o8 C0 n - ('陶俊', '语文', 88),
, [! ?" [% \* B - ('陶俊', '数学', 84),
3 l0 O" o) U8 Q - ('陶俊', '英语', 94),! w, h6 @9 }, _. p: P1 g2 E
- ('刘可', '语文', 80),
% _5 U/ J9 ^! Z# \% z& A4 E% @; X - ('刘可', '数学', 86),' L9 F/ Q& w! T9 Y4 W
- ('刘可', '英语', 88),) @ ?& {: M1 b1 h" P
- ('李春', '语文', 89),9 }' y: y9 X2 n7 h! k) R4 s7 k
- ('李春', '数学', 80),
* }- d) U- [* a5 N - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,4 g, b, g$ d% y' ?& r
- sum(if(Subject='语文',Fraction,0)) as 语文,1 M) p0 k' l2 C/ N& l" ~/ _$ d
- sum(if(Subject='数学',Fraction,0))as 数学, K, U- m) q" x1 j: g* U
- sum(if(Subject='英语',Fraction,0))as 英语,
0 x1 K& y# f% c0 f - round(AVG(Fraction),2) as 平均分,
5 @$ y# g; y) o, [. x# Y. T - SUM(Fraction) as 总分$ B5 ?7 O! I+ Z; n0 F% A# _# h
- from t_score group by name # M/ D6 i9 j; m: U" q( p
- union
# c0 k* N2 q7 M; P. m6 J - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(' N+ I; [7 B' V- N6 M2 T. S% b
- select 'TOTAL' as name,8 H% m/ }" q$ ^( y% ^! p5 ^
- sum(if(Subject='语文',Fraction,0)) as 语文,
8 b l, P, @4 b - sum(if(Subject='数学',Fraction,0))as 数学,
+ S- ]3 \$ m; y& X c - sum(if(Subject='英语',Fraction,0))as 英语,
$ e1 B. m& L/ v7 S - SUM(Fraction) as 总分7 {- @3 {* Z0 h! i1 t4 d9 `
- from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
6 W5 a/ L0 Y6 R/ Y( w - sum(case when Subject = '语文' then Fraction end) as Chinese,
. _* x; M2 M3 j6 E, O+ ~ - sum(case when Subject = '数学' then Fraction end) as Math,
3 q, n; B1 }3 G6 o% B - sum(case when Subject = '英语' then Fraction end) as English,
7 H, Y- J3 X* C2 O' ]- I6 X - sum(fraction)as score
) [% q1 v, k, {/ _) r( S - from t_score group by name
5 f; _ m: i4 @6 J" ]6 A* z7 r) Q - UNION ALL
4 o0 O3 G2 }7 t" ] - select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
! H3 D9 M6 }: \$ E8 X - select 'TOTAL' as name,
* M$ d. U. v# g" [# l& w - sum(case when Subject = '语文' then Fraction end) as Chinese,1 [1 }# I# n( c2 ?2 y
- sum(case when Subject = '数学' then Fraction end) as Math, ~3 Q! ?) v3 o: I+ V- C4 V
- sum(case when Subject = '英语' then Fraction end) as English,
$ r/ H7 ~6 K R, P5 u& | - sum(fraction)as score
# T) I" ]8 u, o& h - from t_score group by Subject)t
复制代码方法三: with rollup - select
0 ^- U6 x1 C5 t" ^2 f - ifnull(name,'TOll') name,0 }- H: M) P: I1 R% `8 f
- sum(if(Subject='语文',Fraction,0)) as 语文,
# s# q4 h* K$ n2 j& O9 k+ c - sum(if(Subject='英语',Fraction,0)) as 英语,
" \: q: D& T1 C+ y) L - sum(if(Subject='数学',Fraction,0))as 数学,; o4 J3 E& ?5 y8 Y, f
- sum(Fraction) 总分$ o- R" L: V; h4 t' k5 ^6 T" b! }3 r
- from t_score group by name with rollup
复制代码查询结果如下: 1 Y) ]- ^9 B5 y6 Z1 _
& E' W4 I1 Q3 k2 S) C6 Y, } |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|