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;
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.