Может быть проще поддерживать, если вы используете COUNT (*) с предложением OVER следующим образом:
with cntAppended as (
select
*,
count(*) over (partition by school, grade)
from students
)
select
school,
grade,
individual,
cnt as "class size"
from cntAppended
where (age < 16 and ACT_score is not null)
Не поддавайтесь искушению избегать использования WITH и помещать предложение WHERE в один запрос с помощью COUNT. Если вы это сделаете, вы будете считать только учеников в каждой школе и классе, которые младше 16 лет и имеют оценки ACT. Похоже, что вы хотите сосчитать всех студентов для столбца [размер класса], но видите в результатах только данные для определенных учеников.
Если и когда T-SQL поддерживает ключевое слово QUALIFY , подобные запросы могут быть еще проще:
select
school,
grade,
individual,
count(*) over (partition by school, grade) as "class size"
from students
QUALIFY (age < 16 and ACT_score is not null)