В настоящее время вы пытаетесь запустить коррелированный подзапрос в предложении SELECT
, инкапсулированном в агрегированном запросе, а затем ссылаетесь на этот самый подзапрос по псевдониму в предложении GROUP BY
.
Рассмотрите возможность использования производной таблицычтобы сначала запустить уровень вашего подразделения с помощью подзапроса, а затем во внешнем главном запросе, запустите агрегацию.
SELECT
dt.pname,
COUNT(subjectid) AS CountOfsubjectid,
dt.showntime
FROM
(SELECT
t2.subjectid
t2.pname,
(
select
max(outcometime)
from
table1 t1
where
t1.id = t2.id
)
AS showntime
FROM
table2 AS t2
WHERE
t2.outcome = 'accepted'
) AS dt
GROUP BY
dt.pname,
dt.showntime;
Однако попробуйте не использовать неэффективный коррелированный подзапрос для каждой строки в таблице, чтобы присоединиться к агрегированному запросу дляMAX
рассчитывается один раз и затем снова выполняется агрегация для COUNT
на основном уровне.
SELECT
t2.pname,
COUNT(t.subjectid) AS CountOfsubjectid,
agg.showntime
FROM
table2 AS t2
INNER JOIN
(
select
t1.id,
max(outcometime) as showntime
from
table1 t1
group by
t1.id
) AS agg
ON t2.id = agg.id
WHERE
t2.outcome = 'accepted'
GROUP BY
t2.pname,
agg.showntime;