Bạn có thể tổng hợp bằng cách sử dụng CASE biểu thức, tạo thành một nhóm bằng cách sử dụng id nếu manager_id bằng 0, nếu không thì sử dụng manager_id . Phần còn lại của logic tương tự như những gì bạn đã có.
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;
Một lưu ý nhỏ:Tôi đã sử dụng một hàm trong GROUP BY mệnh đề này không tuân thủ ANSI và do đó có thể không chạy ở mọi nơi. Để khắc phục điều này, trước tiên chúng tôi có thể truy vấn phụ bảng của bạn để tạo các nhóm người quản lý hiệu quả. Sau đó, sử dụng câu trả lời ở trên của tôi đối với kết quả trung gian này.