0

2つのテーブルがあるとしましょう。学生テーブルと観察テーブル。学生のテーブルが次のようになっている場合:

Id Student Grade
1  Alex    3
2  Barney  3
3  Cara    4
4  Diana   4

そして、観測テーブルは次のようになります。

Id Student_Id Observation_Type
1  1          A
2  1          B       
3  3          A
4  2          A
5  4          B
6  3          A
7  2          B
8  4          B
9  1          A

基本的に、クエリから得られる結果は次のようになります。

Student Grade Observation_A_Count
Alex    3     2
Barney  3     1
Cara    4     2
Diana   4     0

つまり、生徒テーブルから生徒ごとにデータを収集し、生徒ごとに観測テーブルからA観測の数を数え、それを他の情報に追加したいと思います。どうすればこれを行うことができますか?

4

2 に答える 2

6

これは単純な結合と集約です。

select
  a.Student,
  a.Grade,
  count(b.Id) as Observation_A_Count
from
  Student a left join
  Observations b on a.Id = b.Student_Id
group by
  a.Student,
  a.Grade
order by
  1

または、相関サブクエリを使用できます。

select
  a.Student,
  a.Grade,
  (select count(*) from observations x where x.Student_Id = a.Id) as Observation_A_Count
from
  Student a
order by
  a.Student
于 2012-06-01T03:29:36.747 に答える
2

特定の条件でテーブルを結合できます。これにより、Observation_B_CountやObservation_C_Countなどのフィールドを作成できます。

SELECT Student.Student, Student.Grade, COUNT(Observation_Type.*) AS Observation_A_Count
FROM Student
LEFT JOIN Observations ON Observations.Student_ID = Student.Student_ID AND Observations.Observation_Type = 'A'
GROUP BY Student.Student, Student.Grade
于 2012-06-01T03:43:10.913 に答える