|
|
原始插入数据如下:2 ]; ]/ ^4 d# J: P# A
要求查询结果如下 :
0 R3 P: ^4 B+ J5 O# d+ x
: u* `* ~( t/ |5 S7 _3 d* C4 D$ p$ i% _, m! M" P; U2 T# O
创建数据库、表
; F5 V8 C( e& F- create database tests;
; T- Y# g' _: V$ W' B: x - use tests;
4 m; |" Q% o4 o- @- g8 I) | - create table t_score() K# f- f5 c" P, e
- id int primary key auto_increment,0 L( x2 |1 |$ U9 E" N) y: S
- name varchar(20) not null, #名字' f/ v6 ~7 K1 Y0 G3 v; y
- Subject varchar(10) not null, #科目. D- g+ T; F6 P' s9 j
- Fraction double default 0 #分数
9 ^' |7 \- j! B( ?4 ?7 |- M% b" }5 { - );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES0 V; ~- w7 Q, Y$ ]) |! \7 y6 n% F. u
- ('王海', '语文', 86),
* s* h( N& x- m( U: n4 ^ - ('王海', '数学', 83),) @( ~2 |0 D$ w) p7 U' b& c
- ('王海', '英语', 93),3 v7 ~3 I5 A) {8 ]3 i# e6 Z$ c
- ('陶俊', '语文', 88),
/ W: C. \& n/ k6 P - ('陶俊', '数学', 84),7 { y; [4 C, ~8 v( i; u; E
- ('陶俊', '英语', 94)," [, H* y$ {: V+ U
- ('刘可', '语文', 80),7 a( X7 m9 }0 @
- ('刘可', '数学', 86),% D7 j6 O! G( i; ~* ]
- ('刘可', '英语', 88),1 h2 l2 ]& t# y1 T" y% v4 c `
- ('李春', '语文', 89),' E, M! V/ q( D# y: e w2 y) c- B; J
- ('李春', '数学', 80),/ V$ W9 A0 |* h- o2 ]9 `/ ]
- ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,
& ~& V8 _( w. S. x5 A - sum(if(Subject='语文',Fraction,0)) as 语文,
$ B5 `, j: w Z* W' c - sum(if(Subject='数学',Fraction,0))as 数学,
) U8 V3 ~) h" ~( t6 S+ f1 w) g - sum(if(Subject='英语',Fraction,0))as 英语,$ ]% m$ Z& A5 s% p0 i
- round(AVG(Fraction),2) as 平均分,: A P4 @* a8 u8 I" [9 b
- SUM(Fraction) as 总分
5 z B- X. g' X - from t_score group by name ) S' f$ v! ~ y: Q
- union
/ r6 A1 D V8 G( D7 i - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(. F) Z# G0 a- t" \
- select 'TOTAL' as name,
6 G5 ^2 |+ ?- I+ C; a B% z - sum(if(Subject='语文',Fraction,0)) as 语文,
1 y$ A. u2 J; k8 ^% | - sum(if(Subject='数学',Fraction,0))as 数学,
! K7 m3 B9 F0 }. }5 c+ @" s1 k) X - sum(if(Subject='英语',Fraction,0))as 英语,
, @9 s3 L3 r. P+ E: L1 S5 C& P - SUM(Fraction) as 总分
. d% u1 X. `: Y - from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
0 X" F1 Q$ i6 s3 N7 v' ^ - sum(case when Subject = '语文' then Fraction end) as Chinese,) A2 y I7 k/ a. b9 L
- sum(case when Subject = '数学' then Fraction end) as Math,9 Q. E/ y! K# k3 v- b6 t
- sum(case when Subject = '英语' then Fraction end) as English," Y+ `* Q/ ?6 m
- sum(fraction)as score
& {4 j) Q% g0 ]+ J9 e4 M4 x5 c( G - from t_score group by name
2 ^1 S6 K3 B d - UNION ALL+ V! q, x( d+ X6 I' H1 ]
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(0 u) r, G% q- Y
- select 'TOTAL' as name,
5 u0 ^+ a: | w' ]* t; D; S - sum(case when Subject = '语文' then Fraction end) as Chinese,1 C$ N/ q8 X$ Y# D7 ?
- sum(case when Subject = '数学' then Fraction end) as Math,6 x6 e5 H! [* r5 E0 v$ T
- sum(case when Subject = '英语' then Fraction end) as English,2 u1 U- f" C' I+ a* |# I4 P+ `
- sum(fraction)as score% w G8 I* j) e) `- }$ o* n
- from t_score group by Subject)t
复制代码方法三: with rollup - select
' b; y4 D: w. R" F - ifnull(name,'TOll') name,
4 m% }1 M% ~0 a) Y4 w - sum(if(Subject='语文',Fraction,0)) as 语文,
2 L0 f% C1 w( z0 {/ ? - sum(if(Subject='英语',Fraction,0)) as 英语,5 C' z0 c) H; _' O0 f; y0 s
- sum(if(Subject='数学',Fraction,0))as 数学,
; e; _* ?! E2 u/ g n- j5 \ - sum(Fraction) 总分
" o6 ]- f% g5 }' F# ~ - from t_score group by name with rollup
复制代码查询结果如下:
: c) b- d2 @( k# w2 S1 |' M2 S s" C4 T
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|