SQL не выражение GROUP BY - PullRequest
0 голосов
/ 11 мая 2018

Я все еще новичок в SQL.

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

SELECT ATTENDANCESHEET.LECTUREID,TOPIC, (
       SELECT COUNT(STUDENTID) AS ATTENDANCE
           FROM ATTENDANCESHEET
           WHERE ATTENDANCESHEET.STUDENTID = LECTURE.STUDENTID
       )
FROM ATTENDANCESHEET,LECTURE
WHERE ATTENDANCESHEET.LECTUREID = LECTURE.LECTUREID
GROUP BY ATTENDANCESHEET.LECTUREID;

Я получаю сообщение об ошибке "не выражение GROUP BY".Может кто-нибудь помочь мне, пожалуйста?

Ответы [ 3 ]

0 голосов
/ 11 мая 2018

, чтобы решить проблему group by, не зная ожидаемого результата

SELECT ATTENDANCESHEET.LECTUREID,TOPIC, (
       SELECT COUNT(STUDENTID) AS ATTENDANCE
           FROM ATTENDANCESHEET
           WHERE ATTENDANCESHEET.STUDENTID = LECTURE.STUDENTID
       )
FROM ATTENDANCESHEET,LECTURE
WHERE ATTENDANCESHEET.LECTUREID = LECTURE.LECTUREID
GROUP BY ATTENDANCESHEET.LECTUREID,TOPIC,LECTURE.STUDENTID;   -- added the topic and studentid from lecture table

, но я думаю, что он пытается сделать это

SELECT ATTENDANCESHEET.LECTUREID,TOPIC, count(LECTURE.STUDENTID) cntstudent
FROM ATTENDANCESHEET,LECTURE
WHERE ATTENDANCESHEET.LECTUREID = LECTURE.LECTUREID
GROUP BY ATTENDANCESHEET.LECTUREID,TOPIC
0 голосов
/ 11 мая 2018

Попробуйте добавить тему в группу:)

0 голосов
/ 11 мая 2018

Ошибка в том, что у вас коррелированный запрос.Предложение корреляции (where в подзапросе) использует столбец из внешнего запроса, который не агрегируется.Кроме того, у вас есть столбец topic, которого нет в group by.

. Мне кажется, что ваш запрос проще записать так:

select a.lectureid, count(*) as attendance
from attendancesheet a
group by a.lectureid;

Я заметил, что выесть topic в select.Это тоже проблема.Возможно, вы хотите:

select l.lectureid, l.topic, count(*) as attendance
from attendancesheet a join
     lecture l
     on a.lectureid = l.lectureid
group by l.lectureid;

Или, если у вас есть studentid в lecture, возможно:

select l.lectureid, l.topic, count(*) as attendance
from lecture l
group by l.lectureid;

РЕДАКТИРОВАТЬ:

Структура данных не 'Это не имеет смысла для меня, но, возможно, вам нужны оба ключа для join:

select l.lectureid, l.topic, count(*) as attendance
from attendancesheet a join
     lecture l
     on a.lectureid = l.lectureid and a.studentid = l.lectureid
group by l.lectureid;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...