| 日期(rstime) | 结果(result) |
| 2005-05-09 | 胜 |
| 2005-05-09 | 胜 |
| 2005-05-09 | 负 |
| 2005-05-09 | 负 |
| 2005-05-10 | 胜 |
| 2005-05-10 | 负 |
| 2005-05-10 | 负 |
如果要生成下列结果,该如何写sql语句?
| 日期 | 胜 | 负 |
| 2005-05-09 | 2 | 2 |
| 2005-05-10 | 1 | 2 |
select rstime,sum(case result when ‘胜‘ then 1 else 0 end)as 胜,
sum(case result when ‘负‘ then 1 else 0 end)as 负 from result group by rstime;
| name | course | score |
| 张三 | 语文 | 81 |
| 张三 | 数学 | 75 |
| 李四 | 语文 | 76 |
| 李四 | 数学 | 90 |
| 王五 | 语文 | 81 |
| 王五 | 数学 | 100 |
| 王五 | 英语 | 90 |
select distinct name from grade where name not in (select distinct name from grade where score<=80)
| courseid | coursename | score |
| 1 | java | 70 |
| 2 | oracle | 90 |
| 3 | xml | 40 |
| 4 | jsp | 30 |
| 5 | servlet | 80 |
为了方便阅读,查询此表后的显示结果如下(及格分数为60分):
| courseid | coursename | score | mark |
| 1 | java | 70 | pass |
| 2 | oracle | 90 | pass |
| 3 | xml | 40 | fail |
| 4 | jsp | 30 | fail |
| 5 | servlet | 80 | pass |
select *,case when score>=60 then ‘pass‘ else ‘fail‘ end as ‘mark‘ from temp;
| 自动编号 | 学号 | 姓名 | 课程编号 | 课程名称 | 分数 |
| 1 | 2005001 | 张三 | 0001 | 数学 | 69 |
| 2 | 2005002 | 李四 | 0001 | 数学 | 89 |
| 3 | 2005001 | 张三 | 0001 | 数学 | 69 |
删除除了自动编号不同,其他字段都相同的学生冗余信息。
create table temp as select 自动编号 from stu group by 学号,姓名,课程编号,课程名称,分数;
delete from stu where 自动编号 not in (select 自动编号 from temp);
1)写出建表语句;
2)写出SQL语句,查询选修了所有选修课程的学生;
3)写出SQL语句,查询选修了至少5门以上的课程的学生。
1、建表语句
S表:create table s(
id int not null primary key,
name varchar(20)
);
C表:create table c(
id int not null primary key,
cname varchar(20)
);
SC表:create table sc(
sid int not null,
cid int not null,
foreign key(sid) references s(id),
foreign key(cid) references c(id)
);
2、写出SQL语句,查询选修了所有选修课程的学生
select stu.id,stu.name from s stu where (select count(sid) from sc where sid = stu.id) = (select.count(id) from c);
3、写出SQL语句,查询选修了所有选修课程的学生
select stu.id,stu.name from s stu where (select count(sid) from sc where sid = stu.id)>=5;
经典SQL面试题(转)
标签:select 阅读 class delete for _id not 建表 logs