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.