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

Count de varias consultas

Estas en el tema de Count de varias consultas en el foro de Mysql en Foros del Web. Hola a todos... ya lei alguien que postio una pregunta similiar... he intentado adaptarla y no funciona.. basicamente necesito mostrar una tabla ordenada por departamento ...
  #1 (permalink)  
Antiguo 19/01/2009, 12:44
 
Fecha de Ingreso: noviembre-2004
Ubicación: Montréal - Santa Fe
Mensajes: 140
Antigüedad: 19 años, 5 meses
Puntos: 2
Count de varias consultas

Hola a todos...

ya lei alguien que postio una pregunta similiar... he intentado adaptarla y no funciona..

basicamente necesito mostrar una tabla ordenada por departamento donde muestre 3 valores diferentes por cada deparmento que representan los totales contados de cada una de esas categorias que cumplen con esas condiciones

1) equipos que la garantia ya expiro
2) que expiran en este ano
3) que expiran a partir del ano proximo o mas

La parte de FROM con los OUTER JOIN esta bien ya que me tira la cantidad real de registros totales que cumplen esas condiciones..

Ta bla que deberi obtener seria algo asi:


Código:
              name                 Expired     This_Year     OnTime
Account Management                  2           4             6
Architecture and Systems            1            0             5
Business Administration             2            2             2
Intente con esta Consulta

Código:
SELECT
  department.name,
  department.manager,
  count(datediff(warrantyExpiry, CURDATE())<0) AS Expired,
  count((datediff(warrantyExpiry, CURDATE())>=0) AND (datediff(warrantyExpiry, CURDATE())<365)) AS This_Year,
  count(datediff(warrantyExpiry, CURDATE())>366) AS Good
FROM (
  workstation
  LEFT OUTER JOIN user ON (workstation.fk_userID = user.pk_id)
  LEFT OUTER JOIN wsdetails ON (workstation.pk_workstationID = wsdetails.pkfk_workstationID)
  INNER JOIN department ON (user.fk_deptID = department.pk_id)
  )
  
GROUP BY department.name, department.manager
ORDER BY
  department.name
pero me tira solo el total de PC por departamento y me repite ese valor en las columnas

Podria alguien orientarme un pokito?

Muchas Gracias
  #2 (permalink)  
Antiguo 19/01/2009, 21:17
 
Fecha de Ingreso: noviembre-2004
Ubicación: Montréal - Santa Fe
Mensajes: 140
Antigüedad: 19 años, 5 meses
Puntos: 2
Respuesta: Count de varias consultas

Bueno gente aqui voy otra vez.. con mis monologos

solucione el problema de esta manera
Código:
SELECT department.name,
          SUM( IF( DATEDIFF( warrantyExpiry, CURDATE( ) ) <0, 1, 0 ) ) AS Expired,
          SUM( IF( DATEDIFF( warrantyExpiry, CURDATE( ) ) >=0, 1, 0 )
          AND IF( DATEDIFF( warrantyExpiry, CURDATE( ) ) <=365, 1, 0 ) ) AS ThisYear,
          SUM( IF( DATEDIFF( warrantyExpiry, CURDATE( ) ) >365, 1, 0 ) ) AS OnTime,
          COUNT( * ) AS total
FROM (
workstation
LEFT OUTER JOIN user ON ( workstation.fk_userID = user.pk_id )
LEFT OUTER JOIN wsdetails ON ( workstation.pk_workstationID = wsdetails.pkfk_workstationID )
INNER JOIN department ON ( user.fk_deptID = department.pk_id )
)
GROUP BY department.name
ORDER BY department.name
Es bastante interesante este caso y como se puede usar esos IFs con condiciones internas que en verdad no encontre en ningun tutorial dentro la web..
solo prueba y error

Gracias a los que me leyeron
;)
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 02:46.