Sie können mit einem CASE aggregieren Ausdruck, der mit der id eine Gruppe bildet wenn die manager_id Null sein, andernfalls wird die manager_id verwendet . Der Rest der Logik ähnelt dem, was Sie bereits haben.
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;
Eine Randnotiz:Ich habe eine Funktion in GROUP BY verwendet -Klausel, die nicht ANSI-kompatibel ist und daher möglicherweise nicht überall ausgeführt wird. Um dies zu beheben, können wir zunächst Ihre Tabelle unterabfragen, um die effektiven Managergruppen zu generieren. Verwenden Sie dann meine obige Antwort gegen dieses Zwischenergebnis.
