2012-03-05 96 views
2

学生分组表:选择不同的工作不正常

STDNT_GROUP 

studentId,CollegeID,studentgroup,flag 
1,007,panthers,y 
2,003,owls,n 
3,007,owls,y 
1,007,texans,y 
2,003,texans,n 

预计输出

1,007 
2,003 
3,007 

我想唯一的学生证以及各自大学的ID。

我尝试此查询:

select distinct(studentId),collegeID from; 

select studentId,collegeID from STDNT_GROUP where studentId in(select distinct(studentId) from STDNT_GROUP)"; 
+2

对tSQL更熟悉但选择stu dentId,来自STDNT_GROUP组的studentID由studentId工作? – ScottJShea 2012-03-05 18:51:11

+1

圆括号与否,查询'SELECT DISTINCT studentId,CollegeID FROM STDNT_GROUP'应该是一样的。 – 2012-03-06 01:02:14

回答

5

使用DISTINCT没有括号应该会得到你想要的。 DISTINCT应该被认为是一个子句,而不是您传递列名作为参数的函数。它返回一组不同的而不是查询返回的超集,而不是单列中的不同值。

SELECT DISTINCT 
    studentId, 
    CollegeID 
FROM STUDENT_GROUP 
+0

是的,我得到了一些输出。实际上,我得到的行数很大。是否有办法检查我是否获得了独特的值? – sriram 2012-03-05 18:55:36

+1

不要相信数据库,呃?那么,如果结果集*中的任何行不是唯一的,那么'SELECT studentid,collegeid,COUNT(*)FROM(SELECT DISTINCT studentId,CollegeID FROM STUDENT_GROUP)GROUP BY studentid,collegeid HAVING COUNT(*)> 1;'会返回一些行。 – Tebbe 2012-03-05 21:35:37

+0

@Michael:我没有Oracle方便测试,但我没有看到任何理由使查询不能与圆括号一起工作(完全相同)。 – 2012-03-06 01:03:31

1

问题可能是你在不同的呼叫使用paranthesis的。请试试:

 SELECT DISTINCT studentID, collegeID 

提供您实际获得的输出与预期输出相反可能会有帮助。这可能有助于我们更好地确定可能会出错的原因。

1

你可以用这个无序的结果:

select distinct studentid, collegeid from stdnt_group 

或者这样:

select studentid, collegeid from stdnt_group 
group by studentid, collegeid 

或者你可以通过子句其中任何添加的顺序检索它们依次是:

[previous query] 
order by studentid, collegeid 
+1

排序后的结果将是'select distinct studentId,collegId来自stdnt_group order by studentId,collegeId'或'select studentId,collegeId来自stdnt_group group by studentId,collegeId order by studentId,collegeId'。如果没有'order by',结果可能会或可能不会被排序。 – 2012-03-06 00:56:02

+0

“GROUP BY”对结果进行排序时DISTINCT没有进行排序的声明的任何引用? – 2012-03-06 00:59:51

+0

我的不好,错过了订单。更新了我的答案。 – 2012-03-06 01:06:01