Hola de nuevo,
estoy haciendo unas pruebas, y la verdad, no me están convenciendo. A no ser que esté haciendo algo mal, y que agradecería que me lo indicarais si alguien lo sabe.
Mi intención es sacar una consulta con las poblaciones y los estados civiles de los clientes. La tabla es de clientes, en donde hay id, nombre, población y estado civil. La tabla tiene 16.500 registros. Existen 4 estados civiles ,a saber: CASADO, SOLTERO, SIN DEF. y VIUDO ( tened en cuenta que no está en producción, son pruebas
).
Una primera consulta sería
Código SQL
[-]
select poblacion,
sum ( case when estadocivil='CASADO' then 1 ELSE 0 END) AS CASADO,
sum ( case when estadocivil='SOLTERO' then 1 ELSE 0 END) AS SOLTERO,
sum ( case when estadocivil='SIN DEF.' then 1 ELSE 0 END) AS SINDEF,
sum ( case when estadocivil='VIUDO' then 1 ELSE 0 END) AS VIUDO
from cliente
group by poblacion
Respuesta perfecta, tiempo de consulta aprox 3 segundos.
Utilizando WITH
Código SQL
[-]
with
estadosciviles as (
select estadocivil as EC, count(idcliente) as NUMERO
from cliente
group by estadocivil)
select poblacion,
ECC.numero as CASADOS,
ECS.numero as SOLTEROS,
ECSD.numero as SINDEF,
ECV.numero as VIUDOS
from cliente C
left join estadosciviles ECC on C.estadocivil=ECC.EC
and ECC.EC='CASADO'
left join estadosciviles ECS on C.estadocivil=ECS.EC
and ECS.EC='SOLTERO'
left join estadosciviles ECSD on C.estadocivil=ECSD.EC
and ECSD.EC='SIN DEF.'
left join estadosciviles ECV on C.estadocivil=ECV.EC
and ECV.EC='VIUDO'
Resultado inexacto. Me devuelve más de una fila por población, y datos un poco extraños.
Tiempo de respuesta. Me deja el equipo cuajado un par de minutos al menos.
Me da la sensación de que estoy haciendo mal la consulta. A ver si alguien me puede poner luz...
Gracias