SET @ESPANA=(SELECT COUNT(id) FROM localidades);
SET @ISLAS=(select COUNT(DISTINCT l.id)
from localidades l, municipios m,
provincias p, regiones r
where
l.fk_municipio = m.id and
m.fk_provincia = p.id and
p.fk_region = r.id and
(r.nombre like "%islas%" or
r.nombre = "ceuta" or r.nombre = "melilla"));
set @peninsula:=(select @espana-@islas);
set @lm:=39.840406;
set @lnm:=-2.9949505;
select concat(truncate(
count(distinct ll.fk_localidad)*100/@peninsula,2)," %") tp
from loc_localizaciones ll,
geo_localizaciones g where
ll.fk_geolocalizacion = g.id and
g.latitud<@lm and g.longitud>@lnm and
ll.fk_localidad NOT IN
(select l.id from localidades l, municipios m,
provincias p, regiones r
where
l.fk_municipio = m.id and m.fk_provincia = p.id and
p.fk_region = r.id and (r.nombre like "%islas%" or
r.nombre = "ceuta" or r.nombre = "melilla"));
/* De las regiones de Andalucía y Cataluña,
indica cuantas localidades empiezan o
terminan por la letra "A" */
select r.nombre, count(l.id)
from localidades l, municipios m,
provincias p, regiones r
where
(l.nombre like "a%" or l.nombre like "%a")
and
r.nombre in ("andalucia","cataluña")
and l.fk_municipio = m.id and
m.fk_provincia = p.id and
p.fk_region = r.id
group by r.nombre
select r.nombre, p.nombre,
count(distinct pc.fk_comarca) as nc
from regiones r, provincias p, prov_comarcas pc
where p.id = pc.fk_provincia and
p.fk_region = r.id
group by r.nombre, p.nombre with rollup
/* listado que cuente todos los códigos
postales que tiene cada municipio, cada
comarca, cada provincia y cada region.
TODO en una única select */
select r.nombre, p.nombre, c.nombre, m.nombre,
count(distinct cl.fk_cod_postal) ncp
from cod_localidades cl, localidades l,
municipios m, comarcas c, provincias p,
regiones r
where cl.fk_localidad = l.id and
l.fk_municipio = m.id and m.fk_comarca = c.id
and m.fk_provincia = p.id and
p.fk_region = r.id
group by r.nombre, p.nombre, c.nombre, m.nombre
with rollup
-- order by ncp desc
set @esp:=(select count(id) from localidades);
select r.nombre, p.nombre, count(l.id) cl,
concat(round(count(l.id)*100/@esp,2)," %") tp
from localidades l, municipios m,
provincias p, regiones r
where l.fk_municipio = m.id and
m.fk_provincia = p.id and
p.fk_region = r.id
group by r.nombre, p.nombre
with rollup;
select r.nombre, p.nombre, c.nombre
from regiones r inner join provincias p
on r.id = p.fk_region join prov_comarcas pc
on p.id = pc.fk_provincia join comarcas c
on pc.fk_comarca = c.id
where r.nombre like "a%"
set @esp:=(select count(id) from municipios);
select * from
(select r.nombre n1, p.nombre n2, count(m.id) nm,
concat(round(count(m.id)*100/@esp,2)," %") tp
from municipios m join provincias p
on m.fk_provincia = p.id join regiones r
on p.fk_region = r.id
where substring(r.nombre,1,1) in ("a","e","i","o","u")
group by r.nombre, p.nombre
with rollup
having nm > 100) mitabla order by nm desc
/* calcula la máxima diferencia del número de municipios
que hay entre las provincias de Aragón y Andalucía*/
select max(tm) - min(tm) from
(select p.nombre, count(m.id) tm
from municipios m join provincias p
on m.fk_provincia = p.id join regiones r
on p.fk_region = r.id
where r.nombre = "aragon" or r.nombre = "andalucia"
group by p.id) t