简单SQL语句求解(应聘题)----在线等待

TTNYFC 2003-03-29 05:15:16
1、写一个SQL语句,要求返回符合条件的每一类的第一条记录,形如:
Select * From
a,b
where a.cutomerid='3' and b.type='3,7,9,12'
但一共只能返回四条记录。
2、在上一题的基础上,返回的四条记录中再加上该类型的合计值。
行不行呀?
...全文
25 点赞 收藏 15
写回复
15 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
playyuer 2003-04-05
本题考的就是(自)相关子查询!!!!
回复
TTNYFC 2003-03-31
是IN(....)
顺便请问这样做的效率如何,最好能推荐帖子让我大补一下。
回复
playyuer 2003-03-30
b.type='3,7,9,12' ???
还是:
b.type in ('3','7','9','12')????

回复
playyuer 2003-03-30
本题考的就是(自)相关子查询!!!!
回复
TTNYFC 2003-03-30
各位老兄,像OpenVMS(半部伦语) 所说的可以实现我的要求,但我理解把select语句放在Where条件中是不是每条记录的Where过滤都要产生一次查询。我有五万条记录,这样的SQL语句是不是不写也罢?我现在不方便做测试,各位能不能给我讲解一下效率总题?
回复
OpenVMS 2003-03-30
1 Select * From
a,b b1
where a.cutomerid='3' and b.type='3,7,9,12'
and id in (select top 1 id from b where type=b1.type)

2 Select *,(select count(*) from T where type = t1.type) TOT From
a,b b1
where a.cutomerid='3' and b.type='3,7,9,12'
and id in (select top 1 id from b where type=b1.type)
回复
如果确定同一关键字虽然有多个联系人,但有联系人都不同时, 可用:
SELECT *
FROM t1 a
WHERE t1.联系人 = (SELECT min(联系人) FROM t1 b WHERE b.关键字 = a.关键字)

或者根据条件将min改为max
回复
playyuer 2003-03-29
《一道褒贬不一的 SQL 考试题》
http://www.csdn.net/Develop/read_article.asp?id=15989

10.列印各科成绩前三名的记录:(不考虑成绩并列情况)
学生ID,学生姓名,课程ID,课程名称,成绩,教师ID,教师姓名

如果仅从成绩考虑前三名的人,利用相关子查询的知识:

SELECT *
FROM 成绩表 t1
WHERE 成绩 IN (SELECT TOP 3 成绩
FROM 成绩表
WHERE t1.课程id = 课程id
ORDER BY 成绩 DESC
)
ORDER BY t1.课程id

这样查询的结果各科成绩前三名的记录数应该大于等于三,因为可能有并列情况,
如果小于三自然是该门课还没有那么多人考试!
如果不考虑并列情况,严格控制各科只列印三条记录,则使用"学生id"构造相关
子查询条件亦可:

SELECT *
FROM 成绩表 t1
WHERE 学生id IN (SELECT TOP 2 学生id
FROM 成绩表
WHERE t1.课程id = 课程id
ORDER BY 成绩 DESC
)
ORDER BY t1.课程id

如果利用第 10 题的思路也可实现该应用。

回复
playyuer 2003-03-29
SELECT *
,(select count(*) from T where type = t1.type)
FROM T t1
WHERE id IN (SELECT TOP 1 id
FROM T
WHERE t1.Type = type
and type='3,7,9,12'
)
回复
wawxj 2003-03-29
select col1,a.col2,col3 from table a,(select col2,min(col1) as col1 from table group by col2) b
where a.col1=b.col1 and a.col2=b.col2
回复
TTNYFC 2003-03-29
第三次:
1、类别实际上是关键字,不知道有几类
2、合计值是重复关键字的合计值,没有重复关键字的不合计;
3、应聘题上没说用多少条SQL语句,不过根据空白应该只有四行代码可以写
回复
TTNYFC 2003-03-29
再对不起一次,我明白你的回答了,是我说的不够清楚,应该是这样:
我现在有一组查询如下:
----------------------
1 298 'String1'
2 298 'String2'
3 304 'String1'
4 503 'String1'
关键字是298,但有两个联系人,我只要一个,即把第二行去掉即可。而实际上是没有真正的TYPE的。谢谢!
回复
jjdelphi 2003-03-29
题目不清楚:
1、什么是每一类?总共有哪几类啊,总应该有分组的条件吧。
2、返回的四条记录中再加上该类型的合计值,是要把这四条记录求和还是加上每一类的求和?
3、必须使用一个SQL 语句吗?
回复
TTNYFC 2003-03-29
对不起,忘记说了,a和b之间只是普通的ID关联。即a.customerid=B.ID
同时你的回答行不行呀?我怎么感觉只会返回一条呀?
回复
yoki 2003-03-29
1:类似(你没有说清楚,a与b之间的联系怎样?)
select * from a where a.id in
(select top 1 id from a where type=a.type)
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2003-03-29 05:15
社区公告
暂无公告