|
原始插入数据如下:. _! q3 k9 t3 u- ~
要求查询结果如下 :- \& K5 p6 V& N7 B5 {! [2 {, [# I' I
, T9 m7 V2 l* y# l# }
2 Q# f. S+ D7 k创建数据库、表- z4 o/ r+ ]2 A8 T- k
- create database tests;" W2 ~( Q M; [: g3 Y
- use tests;
' M& s* E4 { D# y- b8 | - create table t_score(. ?6 E+ ^* _" S9 \( f
- id int primary key auto_increment,
. P/ a" O% ^( U+ |, J6 I8 |5 `% p1 P - name varchar(20) not null, #名字
3 _" A/ e6 n$ r! A! O1 z& y7 v - Subject varchar(10) not null, #科目
5 H. u) l* _4 \, [& d1 m# O/ D) g - Fraction double default 0 #分数
6 Z: d0 G0 M/ J$ u( F - );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
2 ? E x9 f" U% |/ ~! n- X - ('王海', '语文', 86),
. f/ `2 Y' Z0 ]1 Z5 f - ('王海', '数学', 83),2 ~5 X+ I/ S; ~: o8 N2 z# q
- ('王海', '英语', 93),
5 h5 a1 X% s$ x. E+ a. p% k - ('陶俊', '语文', 88),# H* d- } @$ S, V
- ('陶俊', '数学', 84),
; }& B7 C9 T# ]$ D - ('陶俊', '英语', 94),
: m% N# A% ^' @) L! }: S - ('刘可', '语文', 80),4 ]- S* u0 U: D. X3 Z% ]0 j, r
- ('刘可', '数学', 86),
6 H9 J7 C; u9 ~$ P% T1 o5 v* { - ('刘可', '英语', 88),7 U! D6 k8 L, N3 d
- ('李春', '语文', 89),
/ O) B w+ z; k# C - ('李春', '数学', 80),+ U+ G' u0 y& H+ c+ s) M/ O
- ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,# A7 H( j; b+ [) R- _4 {
- sum(if(Subject='语文',Fraction,0)) as 语文,
" c, t; z& G$ U+ g1 x5 @. Y - sum(if(Subject='数学',Fraction,0))as 数学,
8 D) e9 O/ [6 c0 Z9 U! m' M - sum(if(Subject='英语',Fraction,0))as 英语,/ Z" D( O5 |$ R+ [* s' |
- round(AVG(Fraction),2) as 平均分,
% K3 e) w. n% L9 s1 @( f - SUM(Fraction) as 总分: \, H! c2 A; h- ?) t7 E& j, z
- from t_score group by name . x: D. B/ q i' x/ f$ I j" E! [
- union
% w1 M8 W, f4 m0 j1 A% @ - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(' k, q! G0 I* [) X. E. K* i
- select 'TOTAL' as name, S4 n$ S2 ]+ _5 k" T% d' b3 Q
- sum(if(Subject='语文',Fraction,0)) as 语文,
! E; z/ B. C: U, E, A) w - sum(if(Subject='数学',Fraction,0))as 数学,
/ x. @- t# `( ]7 L - sum(if(Subject='英语',Fraction,0))as 英语,8 o, d4 T8 R, Z* l: K! l: ?5 _
- SUM(Fraction) as 总分% e! W! D0 a- g, \4 I4 U
- from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
) [) J9 P6 m6 M& ]# f - sum(case when Subject = '语文' then Fraction end) as Chinese,
7 ?- [- Q7 K$ N, _ - sum(case when Subject = '数学' then Fraction end) as Math,
$ J8 S; x) Y! L, R# p1 p3 _. {6 | - sum(case when Subject = '英语' then Fraction end) as English,
; \2 h: p' b& ` T0 T2 x: A - sum(fraction)as score: m, n, x9 h( v0 u7 Z# s
- from t_score group by name
3 Q' p& G4 I# G- n+ j0 t& N. N* V - UNION ALL) R! ?( |. Z! r# u
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
2 I" E$ d q8 H$ t - select 'TOTAL' as name,
/ O: W2 R3 [3 D# L - sum(case when Subject = '语文' then Fraction end) as Chinese,
) ^+ A' W2 I) b4 y1 ~ - sum(case when Subject = '数学' then Fraction end) as Math,
$ K" R# w$ Y0 g. j. J r S3 C - sum(case when Subject = '英语' then Fraction end) as English,
- [( a' G- G0 } R - sum(fraction)as score
5 ` m, [$ _ q" l4 g3 t - from t_score group by Subject)t
复制代码方法三: with rollup - select 4 ?1 j* ? d4 }9 l [
- ifnull(name,'TOll') name,
2 i/ B8 b0 F# F( Y5 l' u; j - sum(if(Subject='语文',Fraction,0)) as 语文,
# @- P' U7 {+ M( s I - sum(if(Subject='英语',Fraction,0)) as 英语,1 g+ |1 P$ w' D
- sum(if(Subject='数学',Fraction,0))as 数学,
5 n8 Z( B: m* a3 T# l" {2 i - sum(Fraction) 总分; X) r% \. _( @( p% P0 I. ~
- from t_score group by name with rollup
复制代码查询结果如下:
) j! [4 J- c, d+ H% i, A# M
" A( {; g: X4 j" C) E- x4 `' O+ B |
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|