Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

[SOLUCIONADO] Varios count() en la misma consulta

Estas en el tema de Varios count() en la misma consulta en el foro de Mysql en Foros del Web. Hola, sería de agradecer que me ayudaran con una cuestión Tengo una tabla con varios campos, campo1, campo2, campo3 etc Me gustaría hacer una consulta ...
  #1 (permalink)  
Antiguo 17/06/2013, 15:59
 
Fecha de Ingreso: mayo-2011
Mensajes: 12
Antigüedad: 12 años, 11 meses
Puntos: 0
Varios count() en la misma consulta

Hola, sería de agradecer que me ayudaran con una cuestión

Tengo una tabla con varios campos, campo1, campo2, campo3 etc

Me gustaría hacer una consulta que sacara varios count según los parámetros que cumplan, todos agrupados por campo1, la salida sería:


campo1-campo2(count que cumple unas condiciones) campo3(otras condiciones)
casa - 33 - 2
coche - 545 - 0
moto - 67 - 0
...

Y así varios count(). Decir también que seguramente en los count() tenga que navegar por diferentes tablas, diferentes joins para cada count

Como sería la forma correcta de este select?

Gracias por la ayuda
  #2 (permalink)  
Antiguo 18/06/2013, 02:09
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Varios count() en la misma consulta

Das muy poca información de las condiciones... y te lias con eso de los diferentes joins para cada count....

Código MySQL:
Ver original
  1. SELECT campo1, SUM(if(campo2 condicion,1,0)),SUM(if(campo3 condicion,1,0)
  2. FROM tuTabla
  3. GROUP BY campo1;

Eso te dirá para cada valor de campo1 en cuantos registros el campo2 cumple la condició, idem para campo3.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 18/06/2013, 03:01
 
Fecha de Ingreso: mayo-2011
Mensajes: 12
Antigüedad: 12 años, 11 meses
Puntos: 0
Respuesta: Varios count() en la misma consulta

Cita:
Iniciado por quimfv Ver Mensaje
Das muy poca información de las condiciones... y te lias con eso de los diferentes joins para cada count....

Código MySQL:
Ver original
  1. SELECT campo1, SUM(if(campo2 condicion,1,0)),SUM(if(campo3 condicion,1,0)
  2. FROM tuTabla
  3. GROUP BY campo1;

Eso te dirá para cada valor de campo1 en cuantos registros el campo2 cumple la condició, idem para campo3.
Gracias!! pero al final lo he resuelto con subconsultas, el problema es que para cada count() el select es bastante grande, espero que no se me relentice en exceso al consulta

Mi solución ha sido:

Código MySQL:
Ver original
  1. select campo1, (select count(campo1) from where etc...), (select count(campo1) form where etc...), (select count(campo1) form where etc...)
  2. from tabla
  3. where etc...


y así hasta el infinito. No se si una consulta que al final son 100 líneas de consultas repitiendo las consultas pero cambiando a veces sólo una línea es lo más correccto...

Última edición por gnzsoloyo; 18/06/2013 a las 05:23
  #4 (permalink)  
Antiguo 18/06/2013, 03:53
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Varios count() en la misma consulta

Ufff no se habria que ver mas cosas.....
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #5 (permalink)  
Antiguo 18/06/2013, 05:27
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Varios count() en la misma consulta

Cita:
Iniciado por eraw Ver Mensaje
Gracias!! pero al final lo he resuelto con subconsultas, el problema es que para cada count() el select es bastante grande, espero que no se me relentice en exceso al consulta

Mi solución ha sido:

Código MySQL:
Ver original
  1. select campo1, (select count(campo1) from where etc...), (select count(campo1) form where etc...), (select count(campo1) form where etc...)
  2. from tabla
  3. where etc...


y así hasta el infinito. No se si una consulta que al final son 100 líneas de consultas repitiendo las consultas pero cambiando a veces sólo una línea es lo más correccto...
Pues, te comento que hacerlo de ese modo te resultará terriblemente ineficiente en un momento dado muy cercano.
Es recomendable evitar las subconsultas en el SELECT, lo mismo que en el WHERE, ya que en ambos casos cada subconsulta se ejecutará una vez por cada registro devuelto del SELECT principal... Y en caso de campos no indexados, eso implicaría hacer un full table scan por cada valor a obtener.
Tal vez te puedas imaginar lo que haría eso a la perfomance.

Lo que @quimfv te propone, por otro lado, hace un único table scan, obteniendo el resultado mucho más rápidamente.
Te recomiendo usar ese modo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: campo, count, join, select, tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 08:04.