2012-06-01 1 views
0

Предположим, у меня есть две таблицы. Стол для студентов и таблица наблюдений. Если таблица студентов выглядит следующим образом:SQL - Как подсчитать связанные записи в другой таблице с определенным значением

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 из таблицы наблюдений и применял их к другой информации. Как мне это сделать?

Большое спасибо!

+0

Вы всегда должны указывать, какая база данных вы и поют, поскольку диалекты SQL различаются, и вы также должны обязательно пометить свой вопрос как домашнюю работу, когда выполняете задание, а не задаете вопрос реального мира. – mattmc3

ответ

4

Это простое соединение и агрегат:

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 
1

Вы можете присоединиться к таблице с определенным условием, делая это, вы можете имеют поле для 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 
Смежные вопросы