Skip to content

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!

Spinner
DataFrameas
highest_donation_assignments
variable
-- 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;
Spinner
DataFrameas
top_regional_impact_assignments
variable
-- 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;