mysql - 按列分组但显示所有行

时间:2017-03-31 22:37:45

标签: mysql

我需要这个查询的帮助,这是我的输出:

idProduccion | hp   | totalHp |
      4      | 40   | 75      |
      4      | 35   | 75      |  
      5      | 90   | 90      |
      6      | 2500 | 2500    |
....

如何将hp列与相同的idProduccion相加并显示所有行,例如:

SELECT 
    lp.idProduccion,lp.hp, totalHp
FROM
    lotesproduccion lp
        JOIN
    (SELECT 
        lp.hp, lp.idlotesproduccion, sum(lp.hp) AS totalHp
    FROM
        lotesproduccion lp
    GROUP BY lp.idlotesproduccion) AS lp1 ON lp.idlotesproduccion = lp1.idlotesproduccion

这是我的SQL查询

user_id

2 个答案:

答案 0 :(得分:0)

我已通过idproduction

更改了您的群组查询

选择     lp.idProduccion,lp.hp,lp1.totalHp 从     lotesproduccion lp        离开加入     (选择      lp.idProduccion,sum(lp.hp)AS totalHp     从         lotesproduccion lp     GROUP BY lp.idProduccion)AS lp1 ON lp.idProduccion = lp1.idProduccion

答案 1 :(得分:0)

谢谢@Ramesh Yelda,它确实很好..实际上完整的查询就是这个..

SELECT 
    il.IdLoteNuevo AS id_lotes,
    icu.idCultivosNuevo AS id_cultivos,
    YEAR(p.fechaInicio) * 10000 + MONTH(p.fechaInicio) * 100 + DAY(p.fechaInicio) AS id_fechaInicio,
    YEAR(p.fechaCierre) * 10000 + MONTH(p.fechaCierre) * 100 + DAY(p.fechaCierre) AS id_fechaFin,
    CAST(p.estado AS SIGNED INTEGER) AS estado_produccion,
    rendimiento_hectarea,
    rendimiento_bruto,
    superficie_producida,
    lluvia_produccion,
    gastos_produccion
FROM
    (SELECT 
        idlotes,
            idproduccion,
            idlotesproduccion,
            TRUNCATE(SUM(rb), 2) AS rendimiento_hectarea,
            TRUNCATE(SUM(rb * hp), 2) AS rendimiento_bruto,
            TRUNCATE(SUM(hp), 2) AS superficie_producida
    FROM
        lotesproduccion
    GROUP BY idlotesproduccion) AS lp
        JOIN
    ids_lotes il ON il.idLotesProduccion = lp.idlotesproduccion
        JOIN
    (SELECT 
        c.idLote,
            SUM(c.lluvia) lluvia_produccion,
            lp.idlotesproduccion
    FROM
        clima c
    JOIN lotesproduccion lp ON c.idlote = lp.idlotes
    JOIN produccion p ON p.idproduccion = lp.idProduccion
    WHERE
        c.fecha >= p.fechaInicio
            AND c.fecha <= p.fechaCierre
    GROUP BY lp.idlotesproduccion) c ON c.idlotesproduccion = lp.idlotesproduccion
        JOIN
    produccion p ON p.idproduccion = lp.idProduccion
        JOIN
    ids_cultivos icu ON icu.idCultivos = p.idCultivo
        JOIN
    (SELECT 
        lp.idlotesproduccion,
            hectareas,
            totalHp,
            CASE
                WHEN gp.costo IS NULL THEN 0
                ELSE TRUNCATE((SUM(gp.costo) * (hectareas)) / (totalHp), 2)
            END AS gastos_produccion
    FROM
        gastosproduccion gp
    JOIN (SELECT 
        lp.idProduccion,
            lp.hp AS hectareas,
            lp1.totalHp AS totalHp,
            lp.idlotesproduccion
    FROM
        lotesproduccion lp
    LEFT JOIN (SELECT 
        lp.idProduccion, SUM(lp.hp) AS totalHp
    FROM
        lotesproduccion lp
    GROUP BY lp.idProduccion) AS lp1 ON lp.idProduccion = lp1.idProduccion) AS lp ON lp.idProduccion = gp.idProduccion
    GROUP BY lp.idlotesproduccion) gp ON gp.idlotesproduccion = lp.idlotesproduccion
GROUP BY p.fechaInicio , p.fechaCierre , il.IdLoteNuevo , icu.idCultivosNuevo;

现在它工作得很好,唯一的疑问是,当gp.costo为null时,它应该显示0(因为de case when),而不是显示完整的行。

pd:我不知道如何在评论中添加代码