|
|
原始插入数据如下:
/ M) r* z# U( ~0 N要求查询结果如下 :, w, V% m2 X& O- ?
) S, L6 B$ ^ @
t2 y% b9 T$ @1 x创建数据库、表
3 L( d& v& r7 l3 a7 s6 Z- create database tests;1 H$ X+ U: M& w
- use tests;* N7 O8 h3 A4 n" Q( M; a
- create table t_score(! Y& T0 ~! ?+ B4 v0 p
- id int primary key auto_increment,; x8 {; x9 s+ |3 M
- name varchar(20) not null, #名字
' H0 @) u- J3 x3 O0 j/ F6 Q+ @ - Subject varchar(10) not null, #科目
! U( v/ X: N! X5 `8 y# k - Fraction double default 0 #分数
5 O( g& b. f9 ~' b" W3 q - );
复制代码添加数据 - INSERT INTO `t_score`(name,Subject,Fraction) VALUES9 ~, u! {% m8 {) ~
- ('王海', '语文', 86),
3 I! m% u4 Y. c- U5 z! R - ('王海', '数学', 83),
2 z% n5 d+ O& J# | - ('王海', '英语', 93),
8 ~: x1 L7 B% ~1 Z* y - ('陶俊', '语文', 88),
& R& H* \7 P% v5 u$ b$ x - ('陶俊', '数学', 84),
C7 S* t( y5 E$ e! K* y) H6 F ~ - ('陶俊', '英语', 94),4 E# x9 d5 R2 s, p$ Y: e3 f8 z
- ('刘可', '语文', 80),$ D, x* m/ s% ^2 U
- ('刘可', '数学', 86),
; O' G2 e5 [: n; c - ('刘可', '英语', 88),
% c6 ^% x2 R6 [ - ('李春', '语文', 89),
2 |3 }2 t& Y- V1 W - ('李春', '数学', 80),, u! p# o d& M# Q& [; I8 \1 R/ K
- ('李春', '英语', 87);
复制代码方式一:使用if - select name as 名字 ,
& O5 }2 v1 O- r3 J2 G2 G) W0 J - sum(if(Subject='语文',Fraction,0)) as 语文,
6 ^" i( W7 V X F, \" W1 h - sum(if(Subject='数学',Fraction,0))as 数学, 7 f2 g: w+ ^; t% E* ]9 [. W5 ?
- sum(if(Subject='英语',Fraction,0))as 英语,! B) Q+ J7 @: x8 s( B+ B
- round(AVG(Fraction),2) as 平均分,! ^% l+ X/ U! }* z e
- SUM(Fraction) as 总分5 |" }+ s7 ^. D6 H& L: B7 c
- from t_score group by name ( G1 t5 `5 z1 a* }1 {
- union
, \7 p! W z, ?7 e - select name as 名字 , sum(语文) Chinese,sum(数学) Math,sum(英语) English,round(AVG(总分),2)as 平均分,sum(总分) score from(" l! W4 j6 c" U: k
- select 'TOTAL' as name,# O/ m2 [. c m; ]5 @
- sum(if(Subject='语文',Fraction,0)) as 语文,, w2 T# c1 K' W: [/ h" y
- sum(if(Subject='数学',Fraction,0))as 数学,
0 S3 ~6 A1 p7 U+ K" }& q! `% ] - sum(if(Subject='英语',Fraction,0))as 英语,
; \$ X. s' ?- @1 K: E5 t0 J3 ~ - SUM(Fraction) as 总分
; f( i. d$ j5 g+ @ G7 J p - from t_score group by Subject )t
复制代码方式二:使用case - select name as Name,$ A3 e2 f: ^& V2 u
- sum(case when Subject = '语文' then Fraction end) as Chinese,
! E7 l. U" G, M( m" W: e - sum(case when Subject = '数学' then Fraction end) as Math,8 D P& A1 i/ r8 Y
- sum(case when Subject = '英语' then Fraction end) as English,
+ L& f6 h" E' S$ G4 b' n; ]6 m - sum(fraction)as score# S5 O3 l4 Y2 V; e) ]. K2 l( @% t4 S
- from t_score group by name
7 y' b6 A8 S" _0 U0 w1 b, U - UNION ALL' l* D9 _ } J, R
- select name as Name,sum(Chinese) as Chinese,sum(Math) as Math,sum(English) as English,sum(score) as score from(/ a$ g3 n, j! O$ a% `
- select 'TOTAL' as name,
' E# ]# u' M( @9 X" Q) F# v+ A - sum(case when Subject = '语文' then Fraction end) as Chinese,
& |0 e e6 F7 Y; q( O- p# p5 F - sum(case when Subject = '数学' then Fraction end) as Math,
( O) {2 C% [# [0 R' \) t - sum(case when Subject = '英语' then Fraction end) as English,$ s1 q+ W' p( ^, ]
- sum(fraction)as score
& P* p0 p0 e. N. k. t - from t_score group by Subject)t
复制代码方法三: with rollup - select + y9 w7 z* o* J, U* W- V$ c% i
- ifnull(name,'TOll') name,
, i8 c8 F3 U4 N; V5 M5 F- Z - sum(if(Subject='语文',Fraction,0)) as 语文,
+ x' n7 h9 t# |+ V0 u. v2 P - sum(if(Subject='英语',Fraction,0)) as 英语," z4 o9 A' J" E d4 [+ `
- sum(if(Subject='数学',Fraction,0))as 数学,: [0 q" \6 a1 \3 b0 c5 y. m
- sum(Fraction) 总分
2 w4 W' {! Z# ~9 Y: ?9 Y/ e - from t_score group by name with rollup
复制代码查询结果如下:
, c8 P. k( v3 }2 Z" }2 q! z+ G. b6 S7 q$ z6 I: o& r0 b' c
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
|