一道经典的sql面试题不同的写法

标签: 经典 sql 面试 | 发表时间:2013-08-05 21:12 | 作者:wanglei_samrtfish
出处:http://blog.csdn.net

用一条SQL语句   查询出每门课都大于80分的学生姓名,表( #test)如下:
  
Name Course Mark
张三 语文 81
张三 数学 75
李四 语文 76
李四 数学 90
王五 英语 100
王五 语文 81

 

create table #test
(
Name varchar(10),
Course varchar(10),
Mark float
)

insert into #test
select '张三', '语文', 81 union
select '张三', '数学', 75 union
select '李四', '语文', 76 union
select '李四', '数学', 90 union
select '王五', '英语', 100 union
select '王五', '语文', 81

方法A select distinct Name
from #test A
where not exists(select Course
 from #test
 where Mark < 80 and Name = A.Name)

方法B

select * from #test a where mark > 80 and (select count(*) from #test where name=a.name)= (select count(*) from #test where name=a.name and mark > 80)

方法C

select distinct name from #test a where not exists(select * from #test where a.name=name and mark<80) (我认为这种较好)

方法D

select distinct name from  #test  where
name not in (
select name from #test where mark<=80
)

方法E

select name,min(mark) from #test group by name having min(mark)>80
-----66666
DECLARE @test table (  Name varchar(10),  Course varchar(10),  Mark float) 
insert into @test  select   '张三  ',   '语文  ', 81
 union select   '张三  ',   '数学  ', 75
union select   '李四  ',   '语文  ', 76
 union select   '李四  ',   '数学  ', 90
 union  select   '王五  ',   '英语  ', 100
 union  select   '王五  ',   '语文  ', 81  
SELECT NAME FROM @test GROUP BY name HAVING count(*)=count(case when mark>=80 then 1 else null end) 或者  
SELECT NAME FROM @test GROUP BY name HAVING count(*)=sum(case when mark>=80 then 1 else 0 end)

 

---方法F

select name from #test group  by name having min(mark)>80

作者:wanglei_samrtfish 发表于2013-8-5 21:12:50 原文链接
阅读:8 评论:0 查看评论

相关 [经典 sql 面试] 推荐:

常见 SQL 面试题:经典 50 例

- - SegmentFault 最新的文章
-- 含义是跳过2条取出1条数据,limit后面是从第2条开始读,读取1条信息,即读取第3条数据 select * from table limit 2 offset 1;. -- 含义是从第1条(不包括)数据开始取出2条数据,limit后面跟的是2条数据,offset后面是从第1条开始读取,即读取第2,3条.

一道经典的sql面试题不同的写法

- - CSDN博客推荐文章
用一条SQL语句   查询出每门课都大于80分的学生姓名,表( #test)如下:. select '张三', '语文', 81 union. select '张三', '数学', 75 union. select '李四', '语文', 76 union. select '李四', '数学', 90 union.

SQL Server 面试

- - SQL - 编程语言 - ITeye博客
在SQL语言中,一个SELECT…FROM…WHERE语句称为一个查询块,将一个查询块嵌套在另一个查询块的WHERE子句中的查询称为子查询. 子查询分为嵌套子查询和相关子查询两种. 嵌套子查询的求解方法是由里向外处理,即每个子查询在其上一级查询处理之前求解,子查询的结果作为其父查询的查询条件. 子查询只执行一次,且可以单独执行;.

sql经典语句

- - 数据库 - ITeye博客
3、说明:备份sql server. --- 创建 备份数据的 device. table tab_new like tab_old (使用旧表创建新表). DB2中列加上后数据类型也不能改变,唯一能改变的是增加. 注:索引是不可更改的,想更改必须删除重新建. 10、说明:几个简单的基本的sql语句.

(转)经典sql查询语句大全

- - SQL - 编程语言 - ITeye博客
3、说明:备份sql server. --- 创建 备份数据的 device. A:create table tab_new like tab_old (使用旧表创建新表). DB2中列加上后数据类型也不能改变,唯一能改变的是增加varchar类型的长度. 7、说明:添加主键: Alter table tabname add primary key(col).

我的Sql常见面试题(总结)

- - CSDN博客推荐文章
我开的  DBA群:225982985. 1.用一条SQL语句 查询出每门课都大于80分的学生姓名. 姓名 课程编号课程名称 分数. 1        2005001  张三 0001      数学    69. 2        2005002  李四 0001      数学    89. 3        2005001  张三 0001      数学    69.

一道SQL面试题,到底能难倒了多少人?

- - V2EX - 技术
现有employee 表,表中有 员工编号(id) 员工年龄(age) 员工工资(salary) 员工部门(deptid), 按要求用一条SQL语句完成. 1.查出每个部门高于部门平均工资的员工名单. 2、列出各个部门中工资高于本部门的平均工资的员工数和部门号,并按部门号排序. 3.求每个部门工资不小于6000的人员的平均值;.

android经典面试题集锦

- - CSDN博客推荐文章
四大组件之一,一般的,一个用户交互界面对应一个activity. setContentView() ,// 要显示的布局. , activity 是Context的子类,同时实现了window.callback和keyevent.callback, 可以处理与窗体用户交互的事件. 我开发常用的的有ListActivity , PreferenceActivity ,TabAcitivty等….

PL/SQL动态SQL(原创)

- - ITeye博客
使用动态SQL是在编写PL/SQL过程时经常使用的方法之一. 很多情况下,比如根据业务的需要,如果输入不同查询条件,则生成不同的执行SQL查询语句,对于这种情况需要使用动态SQL来完成. 再比如,对于分页的情况,对于不同的表,必定存在不同的字段,因此使用静态SQL则只能针对某几个特定的表来形成分页.

Java由基础到高级面试题经典问答

- - CSDN博客推荐文章
//20、String 和StringBuffer的区别.    (1)String 类代表字符串. Java 程序中的所有字符串字面值都作为此类的实例实现.     (2)String的长度是不可变的.     (1)线程安全的可变字符序列. 一个类似于 String 的字符串缓冲区,但不能修改.