Aqui hay varias cosas, primero tus tablas no estan normalizadas, repites los nombres de los continentes y paises en las tablas de paises y ciudades, mejor usa id's para que quede normalizada, segundo pides el total de ciudades por pais, si asia tiene una ciudad que es pekin pero no tiene un pais como quieres que salga 1, a tu logica seria el numero de ciudades por continente no por pais, ya que si es por pais no tiene porque salir pekin, si es por continente si.
Código SQL:
Ver originalCREATE TABLE #continente(
id INT,
continente VARCHAR(20)
)
INSERT INTO #continente VALUES (1,'America')
INSERT INTO #continente VALUES (2,'Africa')
INSERT INTO #continente VALUES (3,'Asia')
CREATE TABLE #pais(
id INT,
id_continente INT,
pais VARCHAR(20)
)
INSERT INTO #pais VALUES (1,1,'colombia')
INSERT INTO #pais VALUES (2,1,'cuba')
INSERT INTO #pais VALUES (3,2,'kenia')
CREATE TABLE #ciudad(
id INT,
id_continente INT,
id_pais INT,
nombre VARCHAR(20)
)
INSERT INTO #ciudad VALUES (1,1,1,'bogota')
INSERT INTO #ciudad VALUES (2,1,1,'cartagena')
INSERT INTO #ciudad VALUES (3,1,2,'la habana')
INSERT INTO #ciudad VALUES (3,3,NULL,'Pekin')
SELECT continente,pais, COUNT(ci.id) AS ciudades FROM #continente AS C
LEFT JOIN #pais AS p ON (c.id=p.id_continente)
LEFT JOIN #ciudad AS ci ON (ci.id_pais=p.id AND ci.id_continente=c.id)
GROUP BY continente,pais
Saludos!