2012-03-06 28 views
5

Tôi có bảng nàylàm thế nào để lấy hồ sơ xảy ra hơn hai lần trong oracle?

create table student (
    stu_id int, 
    s_name nvarchar(max), 
    s_subject nvarchar(max), 
) 

và như dữ liệu này

insert into student values(123,'pammy','English'); 
insert into student values(123,'pammy','Maths'); 
insert into student values(123,'pammy','Chemistry'); 
insert into student values(124,'watts','Biology'); 
insert into student values(125,'Tom','Physics'); 
insert into student values(125,'Tom','Computer'; 
insert into student values(125,'Tom','ED'; 

vì vậy tôi muốn lấy hồ sơ mà đã xảy ra hơn hai lần. mã của tôi là

select stu_id,s_Name 
from student 
group by stu_id,s_Name 
having count(stu_id) >2 ; 

kết quả là hoàn hảo.

nhưng khi tôi muốn s_subject cũng như không có hàng nào được chọn. Tôi không biết tại sao.

select stu_id,s_Name,s_subject 
from student 
group by stu_id,s_Name,s_subject 
having count(stu_id) >2 ; 
+2

bạn muốn chủ đề duy nhất trong lựa chọn, phải không? một bản sao chỉ khi stu_id, s_Name được nhân bản, phải không? nếu vậy, bạn muốn nhận chủ đề nào? có nhiều hơn một ... –

Trả lời

19

Vì không có học sinh nào có nhiều hơn một bản ghi cho mỗi môn học.

select stu_id,s_Name,s_subject 
from student 
group by stu_id,s_Name,s_subject 
having count(stu_id) >2 ; 

Mã này yêu cầu các bản ghi xảy ra nhiều hơn hai lần có cùng ID, tên và chủ đề sinh viên. Không có hồ sơ nào trong mẫu của bạn đáp ứng được điều này.

Nếu, tuy nhiên, những gì bạn thực sự muốn là ID, tên và chủ đề của bất kỳ sinh viên nào đang học nhiều hơn hai lớp, điều này có thể thực hiện khá dễ dàng.

Sử dụng một phiên bản sửa đổi nhẹ của SQL ban đầu của bạn như một bộ lọc, chúng tôi có được điều này:

select stu_id, name, subject 
from student 
where stu_id in ( select stu_id 
        from student 
        group by stu_id 
        having count(stu_id) >2); 

Hope this helps.

+0

Thực ra thay vì sử dụng IN, tôi đã sử dụng truy vấn phụ trả về nhiều hơn 1 hàng.Cảm ơn bạn. –

0

Vì bạn đang nhóm theo tất cả các cột tồn tại trong bảng, nó sẽ tạo ra các hàng duy nhất (bản ghi với một hàng tần số) .Như bạn đã chọn các hàng có nhiều hơn 2, nó sẽ không có bản ghi với tần suất 2. Nếu bạn sẽ làm gì với count = 1, bạn sẽ nhận được tất cả các hàng với count = 1,

select stu_id,s_Name,s_subject 
from student 
group by stu_id,s_Name,s_subject 
having count(stu_id) =1 ; 

Kết quả sẽ là:

stu_id  s_Name  s_subject 
    ----------- ------------- 
123   pammy  Chemistry 
123   pammy  English 
123   pammy  Maths 
124   watts  Biology 
125   Tom   Computer 
125   Tom   ED 
125   Tom   Physics 
Các vấn đề liên quan