GoodThought NGO has been a catalyst for positive change, focusing its efforts on education, healthcare, and sustainable development to make a significant difference in communities worldwide. With this mission, GoodThought has orchestrated an array of assignments aimed at uplifting underprivileged populations and fostering long-term growth.
This project offers a hands-on opportunity to explore how data-driven insights can direct and enhance these humanitarian efforts. In this project, you'll engage with the GoodThought PostgreSQL database, which encapsulates detailed records of assignments, funding, impacts, and donor activities from 2010 to 2023. This comprehensive dataset includes:
Assignments: Details about each project, including its name, duration (start and end dates), budget, geographical region, and the impact score.Donations: Records of financial contributions, linked to specific donors and assignments, highlighting how financial support is allocated and utilized.Donors: Information on individuals and organizations that fund GoodThought’s projects, including donor types.
Refer to the below ERD diagram for a visual representation of the relationships between these data tables:
You will execute SQL queries to answer two questions, as listed in the instructions. Good luck!
-- highest_donation_assignments
WITH CTE AS 
(SELECT public.donations.assignment_id AS assignment_id,public.donors.donor_type AS donor_type,ROUND(SUM(public.donations.amount),2) as rounded_total_donation_amount
FROM public.donations
JOIN public.donors
ON public.donations.donor_id = public.donors.donor_id
GROUP BY assignment_id,donor_type
ORDER BY rounded_total_donation_amount DESC
LIMIT 5),
highest_donation_assignments AS 
(SELECT public.assignments.assignment_name,public.assignments.region,CTE.rounded_total_donation_amount,CTE.donor_type
FROM public.assignments
INNER JOIN CTE 
ON CTE.assignment_id = public.assignments.assignment_id)
SELECT * FROM highest_donation_assignments-- top_regional_impact_assignments
WITH CTE AS (SELECT 
public.assignments.assignment_name AS Assignment_Name,
public.assignments.region AS Region,MAX(public.assignments.impact_score) AS Impact_Score,
COUNT(public.donations.donation_id) AS num_total_donations
FROM public.assignments
JOIN public.donations
ON public.assignments.assignment_id = public.donations.assignment_id
GROUP BY public.assignments.assignment_name,public.assignments.region
HAVING COUNT(public.donations.donation_id) >= 1
ORDER BY public.assignments.region,Impact_Score DESC),
CTE1 AS 
(SELECT CTE.*, ROW_NUMBER() OVER(PARTITION BY Region) AS RN FROM CTE),
top_regional_impact_assignments AS 
(
SELECT * FROM CTE1
WHERE Region = 'North' AND RN = 1
UNION ALL
SELECT * FROM CTE1
WHERE Region = 'East' AND RN = 1
UNION ALL
SELECT * FROM CTE1
WHERE Region = 'West' AND RN = 1
UNION ALL
SELECT * FROM CTE1
WHERE Region = 'South' AND RN = 1
)
SELECT 
assignment_name,
region,
impact_score,
num_total_donations
FROM top_regional_impact_assignments
ORDER BY Region