私はこのテーブルを持っています
create table student (
stu_id int,
s_name nvarchar(max),
s_subject nvarchar(max),
)
これはデータとして
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';
そのため、2回以上発生したレコードを取得する必要がありました。私のコードは
select stu_id,s_Name
from student
group by stu_id,s_Name
having count(stu_id) >2 ;
結果は完璧でした。
しかし、私が欲しいときs_subject
同様に、行が選択されていません。理由はわかりません。
select stu_id,s_Name,s_subject
from student
group by stu_id,s_Name,s_subject
having count(stu_id) >2 ;
それは、あなたの生徒の誰もが主題ごとに複数のレコードを持っていないからです。
select stu_id,s_Name,s_subject
from student
group by stu_id,s_Name,s_subject
having count(stu_id) >2 ;
このコードは、同じ学生ID、名前、件名を持つ2回以上発生するレコードを要求します。サンプル内のどのレコードもこれを満たしていません。
ただし、実際に必要なのが3つ以上のクラスを受講している生徒のID、名前、および科目である場合、これは非常に簡単に実行できます。
最初のSQLを少し変更したバージョンをフィルターとして使用すると、次のようになります。
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 );
お役に立てれば。
テーブルに存在するすべての列でグループ化しているため、一意の行(1つの頻度行を持つレコード)が生成されます。すでに2を超える行を選択しているため、頻度2のレコードはありません。 = 1、count = 1のすべての行を取得します。
select stu_id,s_Name,s_subject
from student
group by stu_id,s_Name,s_subject
having count(stu_id) =1 ;
出力は次のようになります。
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