Ver Mensaje Individual
  #11 (permalink)  
Antiguo 12/11/2015, 04:55
sergioo
 
Fecha de Ingreso: abril-2008
Mensajes: 41
Antigüedad: 16 años
Puntos: 0
Pregunta Problemas/dudas varios en consulta con Counts multiples y 0's

Muy buenas, ayer inicie una pregunta que derivo en otras que espero que alguno me pueda ayudar. Empiezo....
--------PROBLEMA 1--------------------------
Tengo 3 tablas: Lectura, Estacion y TipoEstacion

Código:
SELECT ES.id, ES.nombre AS 'nombreEstacion', TE.nombre AS 'Tipo estación', COUNT(LE.id AS 'Cuenta'
FROM estacion AS ES LEFT JOIN
         lectura AS LE ON LE.idEstacion=ES.id LEFT JOIN
         tipo_estacion AS TE ON TE.id=ES.idTipoEstacion
WHERE ES.eliminada=0 AND LE.resultadoNOK=2
GROUP BY ES.id
el resultado es:
ID nombreEstacion Tipo count
85 A Pistola 1
94 B Pistola 2
100 D Pistola 1
106 F Pistola 4
109 G Pistola 3
118 I Pistola 1
121 K Pistola 1

Mi problema es que hay un monton de IDs con su nombreEstacion que tienen counts 0 y no salen.

Solucion:
Código:
SELECT 
    ES.id, 
    ES.nombre nombreEstacion, 
    TE.nombre Tipo estación, 
    COUNT(LE.id) Cuenta
FROM estacion ES 
    LEFT JOIN lectura LE ON ES.id = LE.idEstacion
    LEFT JOIN tipo_estacion ES.idTipoEstacion = TE ON TE.id
WHERE 
    ES.eliminada=0 
    AND LE.resultadoNOK=0 
    OR LE.idEstacion IS NULL
GROUP BY ES.id
No entiendo muy bien porque hay que añadir un "OR LE.idEstacion IS NULL" para que ocurra esto La solución que se me dio es que al hacer lefts join cuando haces un WHERE con condiciones concretas, debes sí o si indicar la condición nula. Simplemente tomas cualquier campo de la segunda tabla y le indicas "OR campo IS NULL.

En mi caso al hacer 2 lefts join deberia incluir otra condicion is null?

-----------------PROBLEMA 2----------------
Siguiente DUDA
si quiero hacer esto mismo pero con 3 counts distintos donde lo unico que cambiaria seria la condicion WHERE
LE.resultadoNOK=0 --->count1
LE.resultadoNOK=1 ---->count2
LE.resultadoNOK=2 ---->count3

La solucioin que se me dio para esto no me funciona bien:
COUNT(LE.id) Cuenta,
SUM(IF(LE.resultadoNOK=1, 1, 0)) NoOk,
SUM(IF(LE.resultadoNOK=0, 1, 0)) Ok

Creo que algo en el orden de ahi esta mal. Y como no entiendo el significado de como va esos SUM(IF)) no se arreglarlo.
-----------------------------

---------------PROBLEMA3-------------
Como es posible que si yo hago consultas independientes para cada uno de los counts me salganun numero de contenedores (rows) distintos. Es que algo estoy haciendo mal verdad???