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

contando registros

Estas en el tema de contando registros en el foro de Bases de Datos General en Foros del Web. Hola gente, necesito contar la cantidad de una determinada cosa. necesito mostrarlo de la siguiente manera. instituto 1 500 instituto 2 900 esto funciona perfecto ...
  #1 (permalink)  
Antiguo 04/05/2009, 11:38
Avatar de moron  
Fecha de Ingreso: mayo-2004
Mensajes: 972
Antigüedad: 20 años
Puntos: 2
contando registros

Hola gente, necesito contar la cantidad de una determinada cosa.

necesito mostrarlo de la siguiente manera.


instituto 1 500
instituto 2 900

esto funciona perfecto con esta consulta (esta acotada para simplificar):

SELECT
IG.nombreInstitutoCompleto,
sum(institutoID) as total
FROM
general.instituto as IG,
base2.ordenPrioridad as OP
base2.titulos as TB

WHERE OP.institucionid =1 and OP.`institutoID`=IG.`institutoID` and
TB.tituloID=OP.tituloID
GROUP BY OP.institucionID


el problema es cuando esa cantidad es cero, no me muestra ningun registro
  #2 (permalink)  
Antiguo 04/05/2009, 11:43
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: contando registros

Tienes que hacer un LEFT JOIN y usar ifnull(campo,0)


SELECT
IG.nombreInstitutoCompleto,
sum(ifnull(institutoID,0)) as total
from tablacondatos LEFT JOIN TABLA2 on ...

No sé cómo se relacionan tus tablas, pero la clave está en usar left join para el campo que siempre quieras que aparezca, y luego hacer IFNULL para los campos que en el cruce saldrán NULL...
Dinos cómo están relacionadas las tablas y trataremos de ayudarte.

Piensa que cualquier dato numérico + null = null
Por eso hay que convertir el null en 0.
  #3 (permalink)  
Antiguo 04/05/2009, 12:28
Avatar de moron  
Fecha de Ingreso: mayo-2004
Mensajes: 972
Antigüedad: 20 años
Puntos: 2
Respuesta: contando registros

gracias por la pronta respuesta.


instituto tiene n titulos
instituto tiene n ordenPropiedad para un titulo, pero aca me interesa solo los que tengan posición 1
esta logica funciona, el tema es con los left.


me interesa que muestre siempre el nombre del instituto:

select ig.nombre, bla,bla
FROM general.instituto as IG left join
BDDesarrollo2.ordenPropiedad as OP inner join
BDDesarrollo2.tituloBibliograficas as TB

pero da errir de sintaxis

la consulta original es esta:
SE
LECT IG.nombreInstitutoCompleto,
sum(institutoeeaid) as total , TB.anio, TB.periodo FROM general.instituto as IG ,
BDDesarrollo2.ordenPropiedad as OP,
BDDesarrollo2.tituloBibliograficas as TB

WHERE OP.institucionid =1 and OP.posicion=1
and OP.`institutoID`=IG.`institutoID` and
TB.tituloID=OP.tituloID
and TB.anio=2009 and TB.periodo=1
GROUP BY OP.institucionID
  #4 (permalink)  
Antiguo 04/05/2009, 14:12
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 1 mes
Puntos: 300
Respuesta: contando registros

SELECT
IG.nombreInstitutoCompleto,
sum(IFNULL(institutoID,0)) as total
FROM
general.instituto IG LEFT JOIN
base2.ordenPrioridad OP ON OP.`institutoID`=IG.`institutoID
LEFT JOIN base2.titulos TB ON TB.tituloID=OP.tituloID
WHERE OP.institucionid =1
GROUP BY OP.institucionID

No sé si lo habré puesto bien.
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 22:30.