Abaixo está uma instrução que descreve uma tarefa de geração de SQL, combinada com uma entrada que fornece mais contexto sobre os esquemas de tabela disponíveis. Escreva o código SQL que responda adequadamente à solicitação
 ###Instrução: Quantos doadores e voluntários únicos existem em cada grupo etário?
 ###Tabelas: 
CREATE TABLE donors (id INT, name VARCHAR, age INT, donation_amount DECIMAL, donation_date DATE, donor_program VARCHAR); INSERT INTO donors (id, name, age, donation_amount, donation_date, donor_program) VALUES (101, 'Jamila Davis', 35, '500', '2021-01-01', 'Arts & Culture'), (102, 'Ricardo Silva', 40, '300', '2021-02-01', 'Sports'), (103, 'Xiao Liu', 50, '800', '2021-03-01', 'Arts & Culture'), (104, 'Kim Lee', 30, '200', '2021-01-01', 'Education'); CREATE TABLE volunteers (id INT, name VARCHAR, age INT, program VARCHAR); INSERT INTO volunteers (id, name, age, program) VALUES (301, 'Nia White', 25, 'Arts & Culture'), (302, 'Pedro Alvarez', 35, 'Sports'), (303, 'Li Wang', 45, 'Arts & Culture'), (304, 'Ji Yu', 20, 'Education'); CREATE TABLE age_groups (id INT, min_age INT, max_age INT); INSERT INTO age_groups (id, min_age, max_age) VALUES (1, 0, 18), (2, 19, 35), (3, 36, 50), (4, 51, 100);
SELECT ag.id as age_group, COUNT(DISTINCT d.id) as total_donors, COUNT(DISTINCT v.id) as total_volunteers FROM age_groups ag LEFT JOIN donors d ON ag.min_age <= d.age AND ag.max_age >= d.age LEFT JOIN volunteers v ON ag.min_age <= v.age AND ag.max_age >= v.age GROUP BY ag.id;