В моем запросе отсутствует строка с нулем

0

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

Запрос:

SELECT 'c'.'ClassID' AS 'id',
  'c'.'Class_Name' AS 'name',
  'c'.'Class_Code' AS 'code',
  COUNT('e'.'EnrollID') AS 'count'

FROM 'CMP_Classes' 'c'

LEFT OUTER JOIN 'CMP_Student_Enrollment' 'e'
  ON 'c'.'ClassID' = 'e'.'Enroll_ClassID'
  AND 'Class_Teacher' = 1

GROUP BY 'e'.'EnrollID'

Данные:

Таблица CMP_Classes:

ClassID | Class_Name                  | Class_Code | Class_Teacher
1       | Mr. Jones' 1st Period Class | QYTNPCGK   | 1
2       | Mr. Jones' 2nd Period Class | HZWNDZPM   | 1
3       | Pizza                       | RRCXQNNE   | 9
4       | Mr. Jones' 3rd Period Class | NFLBXFEQ   | 1

Таблица CMP_Student_Enrollment:

EnrollID | Enroll_Student | Enroll_ClassID
3        | 2              | 1

Результаты запроса:

id | name                        | code     | count
2  | Mr. Jones' 2nd Period Class | HZWNDZPM | 0
1  | Mr. Jones' 1st Period Class | QYTNPCGK | 1

Итак, как вы можете видеть, нет строки для "третьего класса г-на Джонса", но должно быть.

Теги:

1 ответ

1
Лучший ответ

Вы должны group by в неагрегированных столбцов в select:

SELECT c.ClassID AS id, c.Class_Name AS name, c.Class_Code AS code,
       COUNT(e.EnrollID) AS 'count'
FROM CMP_Classes c LEFT OUTER JOIN
     CMP_Student_Enrollment e
     ON c.ClassID = e.Enroll_ClassID
WHERE c.Class_Teacher = 1
GROUP BY c.ClassID, c.Class_Name, c.Class_Code;

Все обратные шаги в вашем запросе затрудняют чтение и запись.

  • 0
    Ах, прости. Мне нужны эти галочки для PHP ... Я попробую ваше предложение. Спасибо!
  • 0
    Спасибо! Это исправило это! Мне пришлось удалить «AS ID» и т. Д. Из строки GROUP BY, но это сработало.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню