Как СЧИТАТЬ поле, не имеющее прямого отношения к выражению where в ORACLE - PullRequest
0 голосов
/ 23 сентября 2011

Я пытаюсь выяснить, сколько студентов обучаются во всех единицах, связанных с определенным курсом.

Я пытался.

SELECT        COUNT(studentID) AS Expr1
FROM            Course CROSS JOIN
                         Enrolment
WHERE        (Course.courseCode = 'S4000')

Но я получаю 3, каждый раз за разные коды курсов.

Это должно быть 1 для S4000. Всего у меня 3 студента.

Ответы [ 2 ]

0 голосов
/ 23 сентября 2011

Из-за того, что происходит в перекрестном соединении, каждая запись в 1-й таблице связана с другой записью 2-й таблицы. В вашем случае предположим, что есть 3 студента и 3 курса

Стол ученический

Id | Имя

1 | а

2 | PQR

3 | хуг

Курсы

Код | Имя

S4000 | c1

S4001 | c2

S4002 | c3

Таблица перекрестных соединений

Student.Id | Student.Name | Courses.code | курсы.имя

1 | а | S4000 | c1

2 | PQR | S4000 | c1

3 | хуг | S4000 | c1

1 | а | S4001 | c2

2 | PQR | S4001 | c2

3 | хуг | S4001 | c2

1 | а | S4002 | c3

2 | PQR | S4002 | c3

3 | хуг | S4002 | c3

Теперь вы можете видеть их 3 записи, созданные для каждого курса, так что вы получаете 3 ответа каждый раз.

поэтому в вашем запросе должно быть одно и то же общее поле для получения требуемых записей, например, для связи ключа Фурье

Вы добавляете общее поле в предложение where, например

SELECT COUNT (studentID) AS Expr1

ОТ КРЕСТА регистрация ГДЕ (Course.courseCode = 'S4000')

        and Course.studentID=Enrolment.studentID

ИЛИ вы можете использовать внутреннее соединение в общем поле

0 голосов
/ 23 сентября 2011

Вы не сказали нам имена столбцов, поэтому я создаю:

SELECT cu.courseCode, COUNT(e.StudentID) AS tot_Students
FROM COURSEUNIT cu INNER JOIN ENROLMENT e
ON cu.unitCode = e.couseCode    
GROUP BY cu.courseCode    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...