Możesz agregować za pomocą CASE
wyrażenie, które tworzy grupę przy użyciu id
jeśli manager_id
być zero, w przeciwnym razie użyj manager_id
. Reszta logiki jest podobna do tej, którą już masz.
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;
Jedna uwaga:użyłem funkcji w GROUP BY
klauzula, która nie jest zgodna z ANSI i dlatego może nie działać wszędzie. Aby to naprawić, możemy najpierw wykonać podzapytanie w Twojej tabeli, aby wygenerować efektywne grupy menedżerów. Następnie użyj mojej powyższej odpowiedzi przeciwko temu pośredniemu wynikowi.