SQL Query – Подзапрос возвращает более одной строки

Таблица:

laterecords ----------- studentid - varchar latetime - datetime reason - varchar 

Мой запрос:

 SELECT laterecords.studentid, laterecords.latetime, laterecords.reason, ( SELECT Count(laterecords.studentid) FROM laterecords GROUP BY laterecords.studentid ) AS late_count FROM laterecords 

Я получаю ошибку «Подзапрос MySQL с возвращением более одной строки».

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

 SELECT laterecords.studentid, laterecords.latetime, laterecords.reason FROM laterecords 

Затем, используя php loop, чтобы получить результаты и сделать ниже запрос, чтобы получить late_count и повторить его:

 SELECT Count(laterecords.studentid) AS late_count FROM laterecords 

Но я думаю, что может быть лучшее решение?

Простое исправление заключается в том, чтобы добавить предложение WHERE в ваш подзапрос:

 SELECT studentid, latetime, reason, (SELECT COUNT(*) FROM laterecords AS B WHERE A.studentid = B.student.id) AS late_count FROM laterecords AS A 

Лучшим вариантом (с точки зрения производительности) является использование соединения:

 SELECT A.studentid, A.latetime, A.reason, B.total FROM laterecords AS A JOIN ( SELECT studentid, COUNT(*) AS total FROM laterecords GROUP BY studentid ) AS B ON A.studentid = B.studentid