数据库 表 student
name course score
A 语文 85
A 数学 75
A 英语 80
B 语文 86
B 数学 98
C 语文 81
C 数学 88
C 英语 90
--创建表a
create table a(
name varchar(10),
course varchar(10),
score int
)
--插入数据到表a中
insert into a values('A','语文',85);
insert into a values('A','数学',75);
insert into a values('A','英语',80);
insert into a values('B','语文',86);
insert into a values('B','数学',98);
insert into a values('C','语文',81);
insert into a values('C','数学',88);
insert into a values('C','英语',90);
--用一条SQL语句查询出每门课都大于80分的学生姓名
select distinct name from a where name not in (select distinct name from a where score<=80);
select name from a group by name having count(score) =sum(case when score>80 then 1 else 0 end );
select name from a group by name having min(score)>=80;
2.一个表中有name,age,score三个字段,查询年龄大于20岁的分数前5名的平均成绩
select
avg
(score)
from
(
select
*
from
table
where
age>20
order
by
score
desc
limit 5)
as
a;
#MySQL
select avg(score) from table where age>20 order by score desc limit 5;
3、有A B C三列,用SQL语句实现:当A列大于B列时选择A列否则选择B列
select (case when a>b then a else b end ),
(case when b>c then b esle c end)
from table_name
drop table table1
create table table1(
a int,
b int,
c int
)
insert into table1 values(22,24,23)
select * from table1
select (case when a>b then a else b end),(case when b>c then b else c end)
from table1
select (case when a>b then a
when a>c then a
when b>c then b else c
end)
from table1
3、 统计胜负结果的SQL语句
一道SQL语句面试题,关于group by
表内容:
2015-05-09 胜
2015-05-09 胜
2015-05-09 负
2015-05-09 负
2015-05-10 胜
2015-05-10 负
2015-05-10 负
如果要生成下列结果, 该如何写sql语句?
胜 负
2015-05-09 2 2
2015-05-10 1 2
--创建表(表示建立一个临时表#tmp,在过程结束,会把该表释放掉,不会存储到数据库)create table #tmp (
rq varchar(10),
shengfu nchar(1)
)
--插入数据
insert into #tmp values('2015-05-09','胜')
insert into #tmp values('2015-05-09','胜')
insert into #tmp values('2015-05-09','负')
insert into #tmp values('2015-05-09','负')
insert into #tmp values('2015-05-10','胜')
insert into #tmp values('2015-05-10','负')
insert into #tmp values('2015-05-10','负')
--查询表中数据
select * from #tmp
--查询需要得到的结果
select rq as ' ',SUM(case when shengfu='胜' then 1 else 0 end) '胜',SUM(case when shengfu='负' then 1 else 0 end) '负'
from #tmp
group by rq
或者(但不是很推荐这样写)
select rq ,SUM(case shengfu when '胜' then 1 else 0 end) '胜',SUM(case shengfu when '负' then 1 else 0 end) '负'
from #tmp
group by rq
select date,(select count(*) from table1 where date = t.date and result = '胜') as '胜'
,(select count(*) from table1 where date = t.date and result = '负') as '负'
from table1 as t group by date;