Можете да агрегирате с помощта на CASE
израз, който образува група с помощта на id
ако manager_id
бъде нула, в противен случай се използва manager_id
. Останалата част от логиката е подобна на това, което вече имате.
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;
Една странична забележка:използвах функция в GROUP BY
клауза, която не е съвместима с ANSI и следователно може да не се изпълнява навсякъде. За да поправим това, можем първо да подзапитваме вашата таблица, за да генерираме ефективните мениджърски групи. След това използвайте моя отговор по-горе срещу този междинен резултат.