一个选择倍数计数(非常相似),可能吗?

时间:2015-11-11 21:48:09

标签: sql sql-server mysqli mysql-workbench bdd

我有个老兄。

我有这样的选择:

SELECT 
    ES.id, 
    ES.nombre nombreEstacion, 
    COUNT(LE.id) Cuenta
FROM estacion ES 
    LEFT JOIN lectura LE ON ES.id = LE.idEstacion
    LEFT JOIN tipo_estacion AS TE ON TE.id=ES.idTipoEstacion
WHERE 
    ES.eliminada=0 
    AND LE.resultadoNOK=0 
    OR LE.idEstacion IS NULL
GROUP BY ES.id

ID NAMEESTATION COUNT

我想用这种颜色做一个选择: ID NAME COUNT1 COUNT2 COUNT3在同一个选择中。

这个计数具有相同的结构。他们只有一点不同。

count1 is when  (WHERE LE.resultadoNOK=0)
count2 is when  (WHERE LE.resultadoNOK=1)
count3 is when  (WHERE LE.resultadoNOK=3)

有些人告诉我,解决方案是使用这样的东西:     COUNT(LE.id)Cuenta,     SUM(IF(X,X,X)COUNT2,     SUM(IF(X,X,X)COUNT3

但我不明白这个结构,我不明白我必须在" IF"中写出什么价值。

我用" CASE"搜索另一个可能性。 ,买我不太明白

有人可以解释我这是怎么运作的吗?

谢谢你们! :)

2 个答案:

答案 0 :(得分:0)

当然,您可以使用SUM和案例表达来完成此操作。

SELECT 
    ES.id, 
    ES.nombre nombreEstacion, 
    SUM(case when LE.resultadoNOK = 0 then 1 end) as CuentaUno,
    SUM(case when LE.resultadoNOK = 1 then 1 end) as CuentaDos,
    SUM(case when LE.resultadoNOK = 2 then 1 end) as CuentaTres
FROM estacion ES 
    LEFT JOIN lectura LE ON ES.id = LE.idEstacion
    LEFT JOIN tipo_estacion AS TE ON TE.id=ES.idTipoEstacion
WHERE 
    ES.eliminada=0 
    AND LE.idEstacion IS NULL
GROUP BY ES.id
    , ES.nombre

答案 1 :(得分:0)

我会像这样使用 CASE 语句:

SELECT 
    ES.id, 
    ES.nombre nombreEstacion, 
    COUNT(LE.id) Cuenta,
    SUM(CASE WHEN LE.resultadoNOK = 0 THEN 1 ELSE 0 END) AS COUNT1,
    SUM(CASE WHEN LE.resultadoNOK = 1 THEN 1 ELSE 0 END) AS COUNT2,
    SUM(CASE WHEN LE.resultadoNOK = 3 THEN 1 ELSE 0 END) AS COUNT3
FROM estacion ES 
    LEFT JOIN lectura LE ON ES.id = LE.idEstacion
    LEFT JOIN tipo_estacion AS TE ON TE.id=ES.idTipoEstacion
WHERE 
    ES.eliminada=0 
    AND LE.resultadoNOK=0 
    OR LE.idEstacion IS NULL
GROUP BY ES.id