|
|
原始插入数据如下:
) X* X f* K4 y1 e4 k$ q) `要求查询结果如下 :' j7 [& M3 M' Y) T. `; d( B
% ^$ i$ K6 W0 K/ p- N6 z* f5 Y9 g# x& z& r" v2 S8 g% h- I/ @, G
创建数据库、表
3 B* O$ _. k1 T b- u1 Y+ J( t- create database tests;) U& ~* Y; e: j& {
- use tests;
6 i \7 s$ z$ [, P/ Z% X - create table t_score(
! Q, A- v- n* l$ O% j) T* P - id int primary key auto_increment,4 p/ [6 `: z, ?7 Z# `
- name varchar(20) not null, #名字
+ c4 z' v% p) C" i - Subject varchar(10) not null, #科目
6 o5 C0 C, q* p, t( o - Fraction double default 0 #分数
`7 ~$ L# f/ t h0 z - );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES
1 C0 }" d7 H5 i( R+ W" q - ('王海', '语文', 86),! B( a0 t' _" X: f& {5 s* b
- ('王海', '数学', 83),& P) M$ B9 c) v3 Y r( b
- ('王海', '英语', 93),# v, X1 B- t! P1 y( t
- ('陶俊', '语文', 88),. R" U" h9 A1 o0 G2 `
- ('陶俊', '数学', 84),2 _+ P3 L$ y3 ]/ {; c7 U1 ^6 ^8 `: R
- ('陶俊', '英语', 94),, u4 h/ f7 I% \- H
- ('刘可', '语文', 80),
8 k; \+ s" e* j2 H - ('刘可', '数学', 86),
; y) K+ Z+ U- [) h; `& w* {1 T - ('刘可', '英语', 88),3 f/ n3 B" r9 M
- ('李春', '语文', 89),0 d* `. v" u4 R
- ('李春', '数学', 80),
% D9 a8 e* U7 p$ U( j - ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,. N$ I4 O, D7 ^3 L
- sum(if(Subject='语文',Fraction,0)) as 语文,! J2 D4 x3 d8 X3 P, }
- sum(if(Subject='数学',Fraction,0))as 数学, " N$ I8 q3 {$ b, m. T- a
- sum(if(Subject='英语',Fraction,0))as 英语,& L7 m0 n4 e. ` t1 @1 q
- round(AVG(Fraction),2) as 平均分,
2 B% }" s4 `4 p1 |# E1 L2 D+ g9 R - SUM(Fraction) as 总分
0 c+ v+ \8 _# g) L/ U! J% a - from t_score group by name 3 z* l# J! D0 e! v- d
- union( N- `( b7 s+ _7 E) h+ i
- select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(- H7 Y# n# n" x& J; x
- select 'TOTAL' as name,
+ i' ?6 g1 @% V; M; k! W) L( G# h - sum(if(Subject='语文',Fraction,0)) as 语文,3 w+ v$ G: I* M! Y
- sum(if(Subject='数学',Fraction,0))as 数学,
0 Y& s$ c$ g- _' B; J - sum(if(Subject='英语',Fraction,0))as 英语,
# t+ M( Q# J; ` - SUM(Fraction) as 总分* x, T) w: o# r! Z r& K
- from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,
5 Y* S# G+ n; o - sum(case when Subject = '语文' then Fraction end) as Chinese,4 o r1 W* u' E3 n8 S
- sum(case when Subject = '数学' then Fraction end) as Math,& p# ^- l9 O5 x6 W. {
- sum(case when Subject = '英语' then Fraction end) as English,
0 _$ Y, z1 h; R) {" M! r- H' |' S - sum(fraction)as score( @( n" U* j- Q( E7 e
- from t_score group by name) v$ u0 D' ~4 j1 H9 r
- UNION ALL! P( G d' q7 b
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(
) {8 Z9 z+ |3 s: `# Y8 f' [ - select 'TOTAL' as name,
4 u0 o \3 \+ ^0 f" g( d' ? - sum(case when Subject = '语文' then Fraction end) as Chinese,
: H; X5 G9 `! r! S - sum(case when Subject = '数学' then Fraction end) as Math,, Y# x! F; S) p, n. Z# e
- sum(case when Subject = '英语' then Fraction end) as English,2 N% r1 @3 ?) r4 M+ y
- sum(fraction)as score
7 |3 y+ t6 o9 m3 w! ] - from t_score group by Subject)t
复制代码方法三: with rollup - select
/ [# v2 A) j) p6 Z _# [ - ifnull(name,'TOll') name,3 p4 q, }# a, V9 T9 j0 o# A
- sum(if(Subject='语文',Fraction,0)) as 语文,
& l3 b1 U E8 Z! j5 {+ ?. c" Q# {) m - sum(if(Subject='英语',Fraction,0)) as 英语,1 W0 R& z8 [ C1 T4 Z, B1 R" m
- sum(if(Subject='数学',Fraction,0))as 数学,1 T5 V/ c8 `, l0 u
- sum(Fraction) 总分; T3 s, n% W5 T
- from t_score group by name with rollup
复制代码查询结果如下: " _0 q* Z' W e' e, P" ~3 @
3 j3 l+ Z2 R. ^5 j" n7 b
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|