sql >> Base de Datos >  >> RDS >> Mysql

Consulta SQL para obtener el subtotal de algunas filas

Puede agregar usando un CASE expresión, que forma un grupo usando el id si el manager_id ser cero; de lo contrario, usar el manager_id . El resto de la lógica es similar a la que ya tienes.

SELECT
    CASE WHEN manager_id = 0 THEN id ELSE manager_id END AS manager_id,
    MAX(CASE WHEN is_manager=1 THEN name END) AS name,
    SUM(no_of_items) AS total_items,
    SUM(revenue) AS total_revenue
FROM items_revenue
GROUP BY
    CASE WHEN manager_id = 0 THEN id ELSE manager_id END;

Demostración

Una nota al margen:utilicé una función en GROUP BY cláusula, que no cumple con ANSI y, por lo tanto, es posible que no se ejecute en todas partes. Para solucionar esto, primero podemos subconsultar su tabla para generar los grupos de administradores efectivos. Luego, usa mi respuesta anterior contra este resultado intermedio.