2012-06-01 4 views
1

Я уже несколько часов борюсь за запрос, но просто не могу понять. Две таблицы, одна для студентов и вторая, которая содержит все классы, для которых зарегистрирован каждый ученик. Мне нужен набор результатов, который имеет одну строку на одного учащегося, плюс количество классов, для которых зарегистрирован студент. Вот моя ближайшая попытка дата:MySQL Count with Join и Group

SELECT 
count(*), student.* 
FROM student 
LEFT JOIN schedule 
ON student.id = schedule.studentid 
GROUP BY schedule.studentid 

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

Текущее исполнение, похоже, работает (в основном), за исключением того, что оно не возвращает студентов без каких-либо классов в их расписание.

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

ответ

2

Вы были очень близки :-)

SELECT 
    student.*, count(*) 
FROM student 
    LEFT JOIN schedule ON student.id = schedule.studentid 
GROUP BY student.* 

должен работать нормально

+0

Я получаю ошибку синтаксиса с группой по student. *, но запрос, похоже, работает как ожидается с группой student.id. Спасибо за быстрый и отличный пример! – Jimmyb

+0

да, ну тогда вместо ученика. * Просто покажите и соберите столбцы по одному на один – Sebas

+0

спасибо! Добрый вечер. – Sebas

0

Из моего понимания, как о подзапроса:

SELECT 
    *, (select count(sch.id) from schedule as sch where sch.studentid = stu.id) as ClassNum 
FROM student as stu 
0
SELECT *, (SELECT COUNT(*) `count` FROM schedule s where s.studentid=student.id) `count` FROM student