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: Quais programas tiveram os maiores e menores valores de doação no segundo semestre de 2021?
 ###Tabelas: 
CREATE TABLE program_donations (donation_id INT, program_id INT, donor_id INT, donation_amount FLOAT, donation_date DATE); INSERT INTO program_donations (donation_id, program_id, donor_id, donation_amount, donation_date) VALUES (1, 1, 1, 200, '2021-07-01'); INSERT INTO program_donations (donation_id, program_id, donor_id, donation_amount, donation_date) VALUES (2, 2, 2, 50, '2021-10-03');
SELECT program_id, donation_amount FROM (SELECT program_id, donation_amount, ROW_NUMBER() OVER (ORDER BY donation_amount DESC) AS high_donation, ROW_NUMBER() OVER (ORDER BY donation_amount ASC) AS low_donation FROM program_donations WHERE EXTRACT(YEAR FROM donation_date) = 2021 AND EXTRACT(MONTH FROM donation_date) BETWEEN 7 AND 12) AS subquery WHERE high_donation = 1 OR low_donation = 1;