Перекрестное применение против CTE на сервере Sql

У меня есть две таблицы
первая таблица называется: tblprovince

create table (
    provinceid int not null primary key (1,1) ,
    provinceNme nvarchar(max),
    description nvarchar(max))

вторая таблица называется tblcity:

create table tblcity(
    cityid int identity (1,1), 
    CityName nvarchar(max), 
    population int, 
    provinceid int foreign key references tblprovince(provinceid)
);

Мне нужно перечислить все провинции, в которых есть как минимум два больших города. Крупный город определяется как имеющий население не менее одного миллиона жителей. Запрос должен возвращать следующие столбцы:

  • tblProvince.ProvinceId
  • tblProvince.ProvinceName
  • производный столбец с именем LargeCityCount, в котором представлено общее количество крупных городов провинции.

select p.provinceId, p.provincename, citysummary.LargeCityCount
from tblprovince p 
cross apply ( 
select count(*) as LargeCityCount from tblcity c 
 where c.population >= 1000000 and c.provinceid=p.provinceid
) citysummary 
where citysummary.LargeCityCount

Верен ли этот запрос?
Существуют ли другие методы, позволяющие мне достичь моей цели?


person kardous mas    schedule 11.01.2021    source источник
comment
Вы сказали 1 миллион, а набрали 100 000.   -  person Antonio Tolusic    schedule 11.01.2021
comment
Да, извините за неосторожную ошибку   -  person kardous mas    schedule 11.01.2021
comment
Добро пожаловать в переполнение стека. Попробуйте использовать проверку орфографии.   -  person greybeard    schedule 11.01.2021
comment
как насчет названия CTE vs CROSS APPLY?   -  person jjdesign    schedule 11.01.2021