|
|
原始插入数据如下:
/ B# {; N [; K% q8 P要求查询结果如下 :+ F$ S- D* y2 o4 o" k H: `- E+ ?
# O7 P& B/ ?; h& s, r
/ y, e& j1 g- B: }$ {创建数据库、表
! O* d* |" _$ M- h& M5 L$ W- create database tests;0 q& ^6 F# E l2 E7 o" M* T
- use tests;+ k5 ]8 r! J/ w% L8 ^
- create table t_score(
9 Q4 v0 E' s+ u- D x2 Y/ v - id int primary key auto_increment,' _9 v3 a) e( U: @( a9 ]
- name varchar(20) not null, #名字
: }( [! Z: _7 e$ a) _7 W& L - Subject varchar(10) not null, #科目8 J9 |1 M/ P. a# G. K u
- Fraction double default 0 #分数
1 e4 R" k( X: ^' G" U' Z4 F - );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
% h( S* X5 ~$ Q9 _; M% \* r& ] - ('王海', '语文', 86),* q' s/ F6 }' z" ]7 V
- ('王海', '数学', 83),
( w3 g& k2 [; T3 c3 l% l" r: T: i - ('王海', '英语', 93), v t& P* U w! ]7 D* Z5 W
- ('陶俊', '语文', 88),) ~, J- D4 [+ G: W1 Y
- ('陶俊', '数学', 84),
0 T7 x5 T1 Q4 Z - ('陶俊', '英语', 94),
6 W; i( t7 _2 N4 P - ('刘可', '语文', 80),
% {1 Y! {. v4 W5 |1 W: A7 F( ] - ('刘可', '数学', 86),! ]9 h: X5 N5 o4 t" s
- ('刘可', '英语', 88),7 b) T3 p, l8 L1 G( D: S
- ('李春', '语文', 89),
! I( u# M: M% x: f0 u* L) \ - ('李春', '数学', 80),$ l3 Y9 P2 h. f- z: H
- ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,6 P8 W- ~7 P, N6 ]+ y: R5 P" ?
- sum(if(Subject='语文',Fraction,0)) as 语文,: z( t) P# H# D+ W6 k
- sum(if(Subject='数学',Fraction,0))as 数学,
6 f# P$ O6 F+ I* U: h" |( i( i - sum(if(Subject='英语',Fraction,0))as 英语,
: o! b6 j, ^" o7 ^: D$ H) f - round(AVG(Fraction),2) as 平均分,
$ i9 @6 }) J* W9 `3 X2 |0 s' S - SUM(Fraction) as 总分* e+ k) X- o7 F# W3 x
- from t_score group by name 5 N, }6 W- H( \. q% o0 { ^& H- {+ E
- union+ f7 }$ y( E3 N8 o
- select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(
0 {( h. K1 n5 A# M0 w - select 'TOTAL' as name,+ Y5 }; i7 B; Z
- sum(if(Subject='语文',Fraction,0)) as 语文,
4 U1 ]& z/ @" R/ r - sum(if(Subject='数学',Fraction,0))as 数学,
4 j0 d( y2 X6 V, W- v, _0 B - sum(if(Subject='英语',Fraction,0))as 英语,
9 U% n ?. ^6 R/ b+ | - SUM(Fraction) as 总分
- J O. u# O( \, U( g- t - from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
1 ?$ Q; J5 p, ]. y" y - sum(case when Subject = '语文' then Fraction end) as Chinese,
- L' |. W: y m+ {, T7 ?9 p, g - sum(case when Subject = '数学' then Fraction end) as Math,
! h5 v8 E6 ?0 \; A: N - sum(case when Subject = '英语' then Fraction end) as English,
$ B- P4 c4 C( W$ ~; g, B% L - sum(fraction)as score
. K- @: s2 w- I8 c - from t_score group by name
# l: C: u9 o7 H" q$ }$ f6 r - UNION ALL; y# X" C3 F) c- I( ^& H, j
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(% o3 S% F% {( n \. A
- select 'TOTAL' as name,
& U% @* Z! K8 Q9 P: t - sum(case when Subject = '语文' then Fraction end) as Chinese,
5 f, }, U6 u4 i+ P; N ?6 e - sum(case when Subject = '数学' then Fraction end) as Math,
# n2 c: w6 x5 I! t* J7 ?( D5 }2 Z7 ^ - sum(case when Subject = '英语' then Fraction end) as English,
Q4 J+ [5 z M - sum(fraction)as score
9 j w T9 e% U4 H - from t_score group by Subject)t
复制代码方法三: with rollup - select
+ z& @3 \$ `* f6 U - ifnull(name,'TOll') name,
. U8 S- U& L2 ?& V - sum(if(Subject='语文',Fraction,0)) as 语文,9 h I3 _1 N" E, U& Y; S2 ?; w
- sum(if(Subject='英语',Fraction,0)) as 英语,
; d: s* f. ]" {% I - sum(if(Subject='数学',Fraction,0))as 数学,) m- T% \, T' M' |
- sum(Fraction) 总分
8 e- J8 t; G7 Z5 f. [" W) E - from t_score group by name with rollup
复制代码查询结果如下: 3 ^$ ?: ~: E) [& G9 }* l4 P8 c8 t, d
: d; @- k5 I0 g) a
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|