Můžete agregovat pomocí CASE
výraz, který tvoří skupinu pomocí id
pokud manager_id
být nula, jinak pomocí manager_id
. Zbytek logiky je podobný tomu, co již máte.
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 poznámka na okraj:Použil jsem funkci v GROUP BY
klauzule, která není v souladu s ANSI, a proto nemusí běžet všude. Abychom to napravili, můžeme nejprve zadat poddotaz vaší tabulky a vygenerovat efektivní skupiny manažerů. Pak použijte moji výše uvedenou odpověď proti tomuto mezivýsledku.