mysql 练习题

-- 6、表中有ABC三列,当A列大于B列时选择A列否则选择B列,当B列大于C列时选择B列否则选择C列
create table abc(
	a int,
	b int,
	c int
);

insert into abc values(22,24,23);

select * from abc;


create database gk;
use gk;

create table gaokao
(
kh int(8) ,
km   char(3),
cj  int
);
use gk;

insert into gaokao
values(2006001,'语文',119),
(2006001,'数学',108),
(2006002, '物理',142),
(2006001, '化学',136),
(2006001,	'物理',127),
(2006002,	'数学',149),
(2006002, '英语'	,110),
(2006002, '语文'	,105),
(2006001, '英语'	,98),
(2006002, '化学'	,129);

select * from gaokao ;

-- 输出高考理科综合总分在300以上且所有科目成绩在600以上的考生的准考证号,并依据总成绩从高到低排序。
select kh,cj from gaokao where km='数学';
select kh,cj from gaokao where km='化学';
select kh,cj from gaokao where km='物理';

##第一步 查询理科综合成绩大于300的学生

select a.kh,a.cj 数学,b.cj 化学,c.cj 物理,sum(a.cj+b.cj+c.cj) 综合成绩
from (select kh,cj  from gaokao where km='数学') a 
left join (select kh,cj  from gaokao where km='化学') b on a.kh=b.kh 
left join (select kh,cj  from gaokao where km='物理') c on a.kh=c.kh
group by kh
having 综合成绩>300;


##第二步  子查询并且总分在600分以上的同学
select kh
from(
select a.kh,a.cj 数学,b.cj 化学,c.cj 物理,sum(a.cj+b.cj+c.cj) 综合成绩
from (select kh,cj  from gaokao where km='数学') a 
left join (select kh,cj  from gaokao where km='化学') b on a.kh=b.kh 
left join (select kh,cj  from gaokao where km='物理') c on a.kh=c.kh
group by kh
having 综合成绩>300) z
where z.kh in
(select kh
from gaokao
group by kh
having sum(cj)>600);

  

原文地址:https://www.cnblogs.com/manjianlei/p/11298722.html