Anda dapat menggabungkan menggunakan CASE
ekspresi, yang membentuk grup menggunakan id
jika manager_id
menjadi nol, jika tidak menggunakan manager_id
. Logika lainnya mirip dengan yang sudah Anda miliki.
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;
Satu catatan tambahan:Saya menggunakan fungsi di GROUP BY
klausa, yang tidak sesuai dengan ANSI dan karena itu mungkin tidak berjalan di mana-mana. Untuk memperbaikinya, pertama-tama kami dapat membuat subkueri tabel Anda untuk menghasilkan grup pengelola yang efektif. Kemudian, gunakan jawaban saya di atas terhadap hasil antara ini.