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

标签: 道经 sql 面试 | 发表时间:2013-08-05 13: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面试题不同的写法

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

SQL Server 面试

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

我的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的人员的平均值;.

PL/SQL动态SQL(原创)

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

SQL Server--索引

- - CSDN博客推荐文章
         1,概念:  数据库索引是对数据表中一个或多个列的值进行排序的结构,就像一本书的目录一样,索引提供了在行中快速查询特定行的能力..             2.1优点:  1,大大加快搜索数据的速度,这是引入索引的主要原因..                             2,创建唯一性索引,保证数据库表中每一行数据的唯一性..

Derby SQL 分页

- - ITeye博客
    之前在网上看到有人问 Derby SQL 分页实现的问题,网上有人给出这样的解决方案,SQL 如下:. 其实,这样的分页查询,性能不理想,我试过在 300W 数据量中采用这种分页方式,需要 20~30秒之久;其实 Derby 10.6 以上版本有更好的分页支持,直接给出 SQL 实现如下:.

birt动态SQL

- - ITeye博客
birt动态SQL实现有三种方式:拼接SQL、绑定变量和让应用程序拼接,birt得到返回结果集方式. 在数据集中写SQL,如下:. 选中数据集,点script方式,在beforeOpen事件中写如下SQL:. 然后就可以了,当然,也可以不写第一步,直接所有的SQL都在beforeOpen中拼接. 但是,拼接SQL方式不仅复杂容易错,还会导致SQL注入风险.

sql优化

- - 数据库 - ITeye博客
是对数据库(数据)进行操作的惟一途径;. 消耗了70%~90%的数据库资源;独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低;. 可以有不同的写法;易学,难精通. 固定的SQL书写习惯,相同的查询尽量保持相同,存储过程的效率较高. 应该编写与其格式一致的语句,包括字母的大小写、标点符号、换行的位置等都要一致.

MongoDB sql操作

- - 数据库 - ITeye博客
1.  基本查询:. 下面的示例等同于SQL语句的where name = "stephen" and age = 35.      --返回指定的文档键值对. 下面的示例将只是返回name和age键值对.      --指定不返回的文档键值对. 下面的示例将返回除name之外的所有键值对.