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.