web-dev-qa-db-de.com

wie kann ich Datensätze abrufen, die mehr als zweimal in Oracle vorgekommen sind? 

Ich habe diesen Tisch

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

und das als Daten

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';

deshalb wollte ich aufzeichnungen zurückgreifen, die mehr als zweimal vorgekommen sind. Mein Code ist

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

das Ergebnis war perfekt.

aber wenn ich auch s_subject will, steht dort, dass keine Zeilen ausgewählt sind. Ich weiß nicht warum.

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

Dies liegt daran, dass keiner Ihrer Schüler mehr als eine Aufnahme pro Fach hat.

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

Dieser Code fragt nach Datensätzen, die mehr als zweimal vorkommen und die gleiche Schüler-ID, denselben Namen und denselben Betreff haben. Keiner der Datensätze in Ihrem Beispiel erfüllt dies.

Wenn Sie jedoch tatsächlich die ID, den Namen und die Fächer eines Schülers wünschen, der mehr als zwei Unterrichtsstunden belegt, kann dies ganz leicht erreicht werden.

Wenn Sie eine etwas modifizierte Version Ihres ursprünglichen SQL-Objekts als Filter verwenden, erhalten Sie Folgendes:

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 );

Hoffe das hilft.

24
John N

Wenn Sie nach allen in der Tabelle vorhandenen Spalten gruppieren, werden eindeutige Zeilen generiert (Datensatz mit einer Frequenzzeile). Wenn Sie bereits Zeilen mit mehr als 2 Zeilen auswählen, werden die Datensätze mit der Häufigkeit 2 nicht angezeigt. Wenn Sie werden mit count = 1 tun, Sie erhalten alle Zeilen mit count = 1,

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

Die Ausgabe wird sein:

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
0
user1082916