A ONG GoodThought tem sido um catalisador para mudanças positivas, concentrando seus esforços em educação, saúde e desenvolvimento sustentável para fazer uma diferença significativa em comunidades ao redor do mundo. Com essa missão, a GoodThought organizou uma variedade de projetos voltados para a elevação de populações carentes e o fomento do crescimento a longo prazo.
Este projeto oferece uma oportunidade prática para explorar como insights baseados em dados podem direcionar e aprimorar esses esforços humanitários. Neste projeto, você irá interagir com o banco de dados PostgreSQL da GoodThought, que contém registros detalhados de projetos, financiamentos, impactos e atividades de doadores de 2010 a 2023. Este conjunto de dados abrangente inclui:
Assignments(Projetos): Detalhes sobre cada projeto, incluindo nome, duração (datas de início e término), orçamento, região geográfica e pontuação de impacto.Donations(Doações): Registros de contribuições financeiras, vinculadas a doadores e projetos específicos, destacando como o apoio financeiro é alocado e utilizado.Donors(Doadores): Informações sobre indivíduos e organizações que financiam os projetos da GoodThought, incluindo tipos de doadores.
Consulte o diagrama ERD abaixo para uma representação visual dos relacionamentos entre essas tabelas de dados:
Você irá executar consultas SQL para responder a duas perguntas, conforme listado nas instruções. Boa sorte!
-- highest_donation_assignments
WITH donation_details AS (
SELECT
d.assignment_id,
ROUND(SUM(d.amount), 2) AS rounded_total_donation_amount,
dn.donor_type
FROM
donations d
JOIN donors dn ON d.donor_id = dn.donor_id
GROUP BY
d.assignment_id, dn.donor_type
)
SELECT
a.assignment_name,
a.region,
dd.rounded_total_donation_amount,
dd.donor_type
FROM
assignments a
JOIN
donation_details dd ON a.assignment_id = dd.assignment_id
ORDER BY
dd.rounded_total_donation_amount DESC
LIMIT 5;-- top_regional_impact_assignments
WITH donation_counts AS (
SELECT
assignment_id,
COUNT(donation_id) AS num_total_donations
FROM
donations
GROUP BY
assignment_id
),
ranked_assignments AS (
SELECT
a.assignment_name,
a.region,
a.impact_score,
dc.num_total_donations,
ROW_NUMBER() OVER (PARTITION BY a.region ORDER BY a.impact_score DESC) AS rank_in_region
FROM
assignments a
JOIN
donation_counts dc ON a.assignment_id = dc.assignment_id
WHERE
dc.num_total_donations > 0
)
SELECT
assignment_name,
region,
impact_score,
num_total_donations
FROM
ranked_assignments
WHERE
rank_in_region = 1
ORDER BY
region ASC;