|
|
原始插入数据如下:. o* x6 q O; f- _3 m" \3 ?
要求查询结果如下 :
% m# F6 j; K6 X* F, q0 ~
/ l4 j% o6 {6 w( S( _% X
( W: L( {) O, u创建数据库、表: _% J1 o! f& R% x
- create database tests;
6 S. T0 Q4 E+ H5 j - use tests; e, t/ n6 t2 P3 j
- create table t_score(4 s- ^. S2 k f: n
- id int primary key auto_increment,# z3 H' z% `$ T$ C& {4 w6 |
- name varchar(20) not null, #名字
( ^0 u8 ~/ a& w/ g( u% D - Subject varchar(10) not null, #科目: C& M3 Q6 A5 D# @$ G, G
- Fraction double default 0 #分数# J) M5 c+ P, T& l
- );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
v7 C+ D: t4 f6 J- k+ @7 e - ('王海', '语文', 86),, _; ]5 {, H, q& W
- ('王海', '数学', 83),
J" W$ O+ P* P0 E c - ('王海', '英语', 93),
1 U3 q5 Y* V4 P- O# B) o8 ^+ f# E - ('陶俊', '语文', 88),) N$ d. q, S' p0 M* ?
- ('陶俊', '数学', 84),
3 ?1 b: f- W M% N7 ~ - ('陶俊', '英语', 94),
" n/ K1 `, w/ Y - ('刘可', '语文', 80),
6 f ^0 U" s. w9 P0 ^ - ('刘可', '数学', 86),( O, m/ v# T7 b- x+ a' l& |; o
- ('刘可', '英语', 88),
G: E' r& a, O) M - ('李春', '语文', 89),9 ^% P9 Y9 H3 i
- ('李春', '数学', 80),
6 W# e/ H% }9 E. `+ }4 Z% } - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,' u j/ m8 Q$ R" e6 ^. e
- sum(if(Subject='语文',Fraction,0)) as 语文,* R [8 B, U3 o0 k3 ]8 V; q3 Z
- sum(if(Subject='数学',Fraction,0))as 数学, 7 Y, D8 m$ |8 R, y7 K3 c1 u
- sum(if(Subject='英语',Fraction,0))as 英语,1 a$ t7 x8 ?! |8 A- R
- round(AVG(Fraction),2) as 平均分,; U" y# f5 O6 p) n
- SUM(Fraction) as 总分3 C# \ D+ e+ [
- from t_score group by name
; F, _9 k1 m+ `5 E - union, }" r9 f4 C6 b+ S
- select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(6 {" s$ E6 J2 |5 ~# e
- select 'TOTAL' as name,
/ m) {7 `8 o0 A4 I - sum(if(Subject='语文',Fraction,0)) as 语文,6 G* M4 G- X6 Q% u
- sum(if(Subject='数学',Fraction,0))as 数学,
3 B" d+ {' R' y8 O1 M, m1 w - sum(if(Subject='英语',Fraction,0))as 英语,. A* {( [' i& I9 j- U
- SUM(Fraction) as 总分
+ y% G9 G0 o" H& P/ C- z8 I - from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,6 S8 g& J" S* r4 v1 T8 }1 J; g! N
- sum(case when Subject = '语文' then Fraction end) as Chinese,/ @2 ^. f5 ?5 m! g( _" R
- sum(case when Subject = '数学' then Fraction end) as Math,' g9 E* Q( {8 [! A4 G
- sum(case when Subject = '英语' then Fraction end) as English,
, R3 C0 o6 J) r' C - sum(fraction)as score+ G3 W' B' m& D3 [4 b) o
- from t_score group by name
/ Y$ L; e: P! X: ` - UNION ALL
0 \$ K* ~4 t6 q! H: C - select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(- Q* W, v) X4 k- `
- select 'TOTAL' as name,, R7 G. Q* K% W! ^
- sum(case when Subject = '语文' then Fraction end) as Chinese,4 c" k! [; P2 n, H
- sum(case when Subject = '数学' then Fraction end) as Math,+ q4 w3 u5 n2 ]' N
- sum(case when Subject = '英语' then Fraction end) as English,7 P! g x+ j6 @, ^" U# q
- sum(fraction)as score# p1 b6 [$ x* {" m9 ]$ q, [! l
- from t_score group by Subject)t
复制代码方法三: with rollup - select / S9 T" [( m* Y4 S- e1 y
- ifnull(name,'TOll') name,
" J% \, _; ]$ O# V2 X/ T+ c/ f - sum(if(Subject='语文',Fraction,0)) as 语文,
! B: B$ b3 ]" k0 ?) k - sum(if(Subject='英语',Fraction,0)) as 英语,
/ d, d; F8 k$ j. _7 f! | - sum(if(Subject='数学',Fraction,0))as 数学,
& H' C! ~9 G5 B7 B8 k+ y8 U7 h - sum(Fraction) 总分5 L: G3 ~5 x: B, r+ {# L+ [
- from t_score group by name with rollup
复制代码查询结果如下: , ^7 e' s b7 ~2 w
5 `2 ~" M# {: |+ H
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|