Ужасная вещь, которую вы пытаетесь сделать, но давайте подумаем о том, что у вас есть. Для каждой записи «OUT» вы запрашиваете каждое назначение снова, чтобы получить счет. Я бы предложил трехуровневый запрос. Самое внутреннее состоит в том, чтобы получить все различные значения возраста (в расчете на целое число). Затем получите меньше, чем для создания предварительного агрегированного результата. Затем вы можете присоединиться к исходному выводу, основываясь на самом внешнем значении OUT по сравнению с повторными запросами. Что-то вроде
select
out
from
`august-monolith-205810.Assignment.students` AS out
JOIN ( select
UniqAge.Age,
( SELECT COUNT(*)
FROM `august-monolith-205810.Assignment.students`
WHERE age < UniqAge.age) CountUnderAge
from
( select distinct age
from `august-monolith-205810.Assignment.students` ) UniqAge
) PQByAge
on out.age = PQByAge
AND PQByAge.CountUnderAge <= 2
Этот запрос основан на столбце Age, основанном на INTEGER (не десятичном).