|
|
原始插入数据如下:/ M6 S: s5 ]/ g) z
要求查询结果如下 :( ]" s) V6 [# _5 T7 M% {. V X
6 ~$ V/ }/ o, u2 z! p4 a1 U4 u4 u) T2 ?: K0 }/ r0 d6 Y0 K, \
创建数据库、表) X$ ^" m# F1 }, f8 ?
- create database tests;# Y8 m5 R. U* i K# e- _+ V
- use tests;
, X. \. o8 V8 ~" c4 [2 Q - create table t_score(+ \5 A- ^6 _1 D+ q/ M- x
- id int primary key auto_increment,
" @- _8 W; u/ f* X Y! l: U - name varchar(20) not null, #名字: t5 v: @; j& `( H( Y9 |, F2 k
- Subject varchar(10) not null, #科目' q$ e ?, C; I
- Fraction double default 0 #分数" c: G) R. S5 t; p
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
* d9 [2 d. A8 C$ y0 _+ P! L3 n - ('王海', '语文', 86),; X) {- b6 d; X1 w! K; h p+ [
- ('王海', '数学', 83),) y. l2 N5 z) t1 }
- ('王海', '英语', 93),
+ I3 X6 H/ G, T+ t9 D - ('陶俊', '语文', 88),
- L1 u- p& `6 r1 ? - ('陶俊', '数学', 84),
) Y: T2 b( m& T - ('陶俊', '英语', 94),
b. J4 t# p6 ^: D( i3 b/ C/ @5 G5 V - ('刘可', '语文', 80),# O$ a2 N3 M' b+ {% [. S4 o
- ('刘可', '数学', 86),$ ~% b2 z/ h; R; ^
- ('刘可', '英语', 88),
6 `" `* H" Q% p - ('李春', '语文', 89),
# n2 z* t% y+ m' r# ~9 ~2 M - ('李春', '数学', 80),
9 k; o1 R; n1 P9 L( z2 m/ {4 R( K - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,+ ?. d* ^! g) E9 \8 p
- sum(if(Subject='语文',Fraction,0)) as 语文,! W7 Z+ |4 p1 H9 | i( C1 i
- sum(if(Subject='数学',Fraction,0))as 数学,
& q7 g) x, w* B - sum(if(Subject='英语',Fraction,0))as 英语,7 h; L: N* C# s
- round(AVG(Fraction),2) as 平均分,
+ f# n; ?& L! b; x: A$ @+ K - SUM(Fraction) as 总分, l7 t7 s% a) ^: k# L K
- from t_score group by name
- [$ X4 m, n! u5 V( f/ T - union
2 `, E8 [2 g% {# P+ ]& R: c - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(
" @( p8 p8 E- S/ V$ U0 o8 Q - select 'TOTAL' as name,: w! z8 t9 a3 }2 y7 ^8 s. U/ i+ |' \
- sum(if(Subject='语文',Fraction,0)) as 语文,
( N4 S% F* }" J# u1 X( v" q6 s0 C - sum(if(Subject='数学',Fraction,0))as 数学, 8 @5 S7 p3 F4 H( r1 l6 w, J/ m
- sum(if(Subject='英语',Fraction,0))as 英语,
" V( K. [& @/ ^! K, _; ] - SUM(Fraction) as 总分
5 Q+ c% R7 F6 e- B2 H0 J - from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
/ {( C" z2 N! O' T5 }# d - sum(case when Subject = '语文' then Fraction end) as Chinese,
2 r" X! w; E9 ?# [. H7 O+ M( B - sum(case when Subject = '数学' then Fraction end) as Math," N( O4 u* S6 I' U% v
- sum(case when Subject = '英语' then Fraction end) as English,- V! _& p/ ]8 r$ {' }
- sum(fraction)as score) ]9 m) w4 j( i* \% M& U
- from t_score group by name
& R( w! p( m: M7 @ - UNION ALL
+ X9 b( Z/ ^3 ?3 Q! p8 Z: d& b - select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(5 V: e) K5 N! J: \& I0 u
- select 'TOTAL' as name,
3 w$ ]/ ~7 n7 N/ B - sum(case when Subject = '语文' then Fraction end) as Chinese,8 ^0 w! d3 @- L' A, p
- sum(case when Subject = '数学' then Fraction end) as Math,7 I" h( C% t& C) U+ M
- sum(case when Subject = '英语' then Fraction end) as English,
0 P& B; O# X. K; k( I - sum(fraction)as score
5 G6 l7 s( Q. ^7 o7 E) a- c& h& n - from t_score group by Subject)t
复制代码方法三: with rollup - select
q# L& ~; V" N" S- X+ X4 X - ifnull(name,'TOll') name,4 h% r$ `3 L$ B$ n7 h, ^& }( C2 F
- sum(if(Subject='语文',Fraction,0)) as 语文,5 f1 o; U( M. ~& z- r I- c3 I
- sum(if(Subject='英语',Fraction,0)) as 英语,
; c7 |/ Q4 ]# f! H' n$ | - sum(if(Subject='数学',Fraction,0))as 数学,
6 J- \3 N4 n' f' f) F6 M - sum(Fraction) 总分" A4 y7 p7 S0 n: R
- from t_score group by name with rollup
复制代码查询结果如下:
4 [1 @( j* s* Y0 G! S4 Q& o/ z2 g1 }# z- ]
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|