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
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' )
《一道褒贬不一的 SQL 考试题》 http://www.csdn.net/Develop/read_article.asp?id=1598910.列印各科成绩前三名的记录:(不考虑成绩并列情况) 学生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 题的思路也可实现该应用。
如果确定同一关键字虽然有多个联系人,但有联系人都不同时, 可用: SELECT * FROM t1 a WHERE t1.联系人 = (SELECT min(联系人) FROM t1 b WHERE b.关键字 = a.关键字)或者根据条件将min改为max
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)
同时你的回答行不行呀?我怎么感觉只会返回一条呀?
1、什么是每一类?总共有哪几类啊,总应该有分组的条件吧。
2、返回的四条记录中再加上该类型的合计值,是要把这四条记录求和还是加上每一类的求和?
3、必须使用一个SQL 语句吗?
我现在有一组查询如下:
----------------------
1 298 'String1'
2 298 'String2'
3 304 'String1'
4 503 'String1'
关键字是298,但有两个联系人,我只要一个,即把第二行去掉即可。而实际上是没有真正的TYPE的。谢谢!
1、类别实际上是关键字,不知道有几类
2、合计值是重复关键字的合计值,没有重复关键字的不合计;
3、应聘题上没说用多少条SQL语句,不过根据空白应该只有四行代码可以写
where a.col1=b.col1 and a.col2=b.col2
,(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'
)
http://www.csdn.net/Develop/read_article.asp?id=1598910.列印各科成绩前三名的记录:(不考虑成绩并列情况)
学生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 题的思路也可实现该应用。
SELECT *
FROM t1 a
WHERE t1.联系人 = (SELECT min(联系人) FROM t1 b WHERE b.关键字 = a.关键字)或者根据条件将min改为max
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)
还是:
b.type in ('3','7','9','12')????