2017-04-23 13 views
0

私は4つの表Iは、状態「V」が提出タイプを持つ表の提出で「1」とグループを持っているどのように多くの学生をカウントしたいenter image description hereLEFTジョイント集約でのSQLカウント?

怒鳴る絵のように持っているので中をSTUDENT_ID私はこの

select p.id, (SELECT count(*) FROM (select b.id from student as a , submission as b WHERE a.id = b.student_id and b.id_submission_type =1 and a.status_n='v' and a.id_academic_programe = p.id GROUP BY b.student_id)) from academic_programe as p 

のようなSQLクエリを試してみるこのenter image description here

のようなテーブルを取得することができ、最後の'where句'

任意の提案で不明な列 'p.id' - しかし、私は

1054エラー与えますか?私の英語のsory

答えて

1

ネストされたサブクエリに相関を入れることはできません。幸いなことに、これは修正するのは簡単です:

select p.id, 
     (select count(*) 
     from student st join 
      submission su 
      on st.id = su.student_id and 
       su.id_submission_type = 1 and 
       st.status_n = 'v' and 
     where st.id_academic_programe = p.id 
     ) 
from academic_programe p; 
+0

返信いただきありがとうございます。そのコードは動作しますが、複数の提出物を提出しても1つのstudent_idだけを数えたいと思っています。私のテーブルの提出では、同じタイプの提出を2回以上提出することができます。どのように私はそれを行うことができます任意のアイデア?私はstudent_idでグループをしたい。 – eniac05

+0

@eniac05。 。 。 'count(*)'ではなく、サブクエリで 'count(distinct su.student_id)'を使用します。 –

+0

ありがとう、今thats仕事 – eniac05

1

はこれを試してみてください:

select c.academic_program_name,count(a.distinct student_name) as count 
from 
(select * from student where status = 'v') a 
inner join 
(select * from submission id_submission_type=1) b 
on a.id =b.student_id 
inner join 
academic_program_name c 
on a.id_academic_programe = c.id 
group by c.academic_program_name; 

は私が任意のクエリの場合に知らせてください。

1

次のことを試してみてください...

SELECT student.id, 
     student_name, 
     academic_program_name AS Programe, 
     COUNT(status_n) AS status_n_count 
FROM student 
JOIN Submission ON student.id = Submission.student_id 
RIGHT JOIN academic_program ON student.id_academic_programe = academic_program.id 
WHERE id_submission_type = 1 
    AND status_n = 'v' 
GROUP BY student.id, 
     student_name, 
     academic_program_name; 

この文はとてもstudentidstudent_namestatus_nid_submission_typeフィールドを含むテーブルを取得するようstudentSubmissionに参加して開始します。これは、RIGHT JOINで、各学術プログラムが各生徒の詳細と一緒にリストされ、生徒のいないプログラムがまだリストされているテーブルを形成するために編集されます。

結果のデータセットは、ご質問やコメントがあれば、それに応じてコメントを投稿すること自由に感じなさいWHERE句、GROUP編とSELECT

であなたの基準ごとに洗練されています。