Krishna Prakash
Initial commit For SQL Practice Platform
e7cf806
[
{
"id": "q1",
"title": "List female patients",
"difficulty": "Beginner",
"description": "Retrieve the names and contact details of all female patients.",
"hint": "Use a WHERE clause to filter by gender.",
"expected_sql": "SELECT name, contact FROM patients WHERE gender = 'Female';"
},
{
"id": "q2",
"title": "Find appointments on specific date",
"difficulty": "Beginner",
"description": "Show all appointments scheduled on July 10, 2023.",
"hint": "Use a WHERE clause with date comparison.",
"expected_sql": "SELECT appointment_id, patient_id, doctor_id, appointment_date FROM appointments WHERE appointment_date = '2023-07-10';"
},
{
"id": "q3",
"title": "List cardiologists",
"difficulty": "Beginner",
"description": "Retrieve the names and contact details of all doctors with the Cardiologist specialty.",
"hint": "Use a WHERE clause to filter by specialty.",
"expected_sql": "SELECT name, contact FROM doctors WHERE specialty = 'Cardiologist';"
},
{
"id": "q4",
"title": "Patients born before 1995",
"difficulty": "Beginner",
"description": "Show the names and dates of birth of patients born before January 1, 1995.",
"hint": "Use a WHERE clause with date comparison on dob.",
"expected_sql": "SELECT name, dob FROM patients WHERE dob < '1995-01-01';"
},
{
"id": "q5",
"title": "List unique diagnoses",
"difficulty": "Beginner",
"description": "Retrieve all unique diagnoses from the appointments table.",
"hint": "Use DISTINCT to avoid duplicate diagnoses.",
"expected_sql": "SELECT DISTINCT diagnosis FROM appointments;"
},
{
"id": "q6",
"title": "Appointments for doctor ID 1",
"difficulty": "Beginner",
"description": "Show all appointments for the doctor with ID 1.",
"hint": "Use a WHERE clause to filter by doctor_id.",
"expected_sql": "SELECT appointment_id, patient_id, appointment_date FROM appointments WHERE doctor_id = 1;"
},
{
"id": "q7",
"title": "List patient names and genders",
"difficulty": "Beginner",
"description": "Show all patient names and their genders.",
"hint": "Select name and gender from the patients table.",
"expected_sql": "SELECT name, gender FROM patients;"
},
{
"id": "q8",
"title": "Appointments in August 2023",
"difficulty": "Beginner",
"description": "Retrieve all appointments scheduled in August 2023.",
"hint": "Use a WHERE clause with LIKE for appointment_date.",
"expected_sql": "SELECT appointment_id, patient_id, doctor_id, appointment_date FROM appointments WHERE appointment_date LIKE '2023-08%';"
},
{
"id": "q9",
"title": "List doctors and specialties",
"difficulty": "Beginner",
"description": "Show all doctor names and their specialties.",
"hint": "Select name and specialty from the doctors table.",
"expected_sql": "SELECT name, specialty FROM doctors;"
},
{
"id": "q10",
"title": "Patients with Routine Checkup",
"difficulty": "Beginner",
"description": "Retrieve the names of patients with a diagnosis of 'Routine Checkup'.",
"hint": "Join patients and appointments, filter by diagnosis.",
"expected_sql": "SELECT p.name FROM patients p JOIN appointments a ON p.patient_id = a.patient_id WHERE a.diagnosis = 'Routine Checkup';"
},
{
"id": "q11",
"title": "Appointments per doctor",
"difficulty": "Intermediate",
"description": "Show the number of appointments for each doctor, including those with zero appointments.",
"hint": "Use a LEFT JOIN and GROUP BY doctor name.",
"expected_sql": "SELECT d.name, COUNT(a.appointment_id) AS appointment_count FROM doctors d LEFT JOIN appointments a ON d.doctor_id = a.doctor_id GROUP BY d.name;"
},
{
"id": "q12",
"title": "Patients with multiple appointments",
"difficulty": "Intermediate",
"description": "Find patients who have more than one appointment.",
"hint": "Join patients and appointments, use GROUP BY and HAVING clause.",
"expected_sql": "SELECT p.name, COUNT(a.appointment_id) AS appointment_count FROM patients p JOIN appointments a ON p.patient_id = a.patient_id GROUP BY p.name HAVING COUNT(a.appointment_id) > 1;"
},
{
"id": "q13",
"title": "Appointments by doctor specialty",
"difficulty": "Intermediate",
"description": "Count the number of appointments for each doctor specialty.",
"hint": "Join doctors and appointments, then GROUP BY specialty.",
"expected_sql": "SELECT d.specialty, COUNT(a.appointment_id) AS total_appointments FROM doctors d JOIN appointments a ON d.doctor_id = a.doctor_id GROUP BY d.specialty;"
},
{
"id": "q14",
"title": "Patient and doctor appointment details",
"difficulty": "Intermediate",
"description": "Show patient names, doctor names, and appointment dates for all appointments.",
"hint": "Join patients, doctors, and appointments tables.",
"expected_sql": "SELECT p.name AS patient_name, d.name AS doctor_name, a.appointment_date FROM appointments a JOIN patients p ON a.patient_id = p.patient_id JOIN doctors d ON a.doctor_id = d.doctor_id;"
},
{
"id": "q15",
"title": "Diagnoses by patient gender",
"difficulty": "Intermediate",
"description": "Count the number of appointments for each diagnosis, grouped by patient gender.",
"hint": "Join patients and appointments, GROUP BY gender and diagnosis.",
"expected_sql": "SELECT p.gender, a.diagnosis, COUNT(a.appointment_id) AS appointment_count FROM patients p JOIN appointments a ON p.patient_id = a.patient_id GROUP BY p.gender, a.diagnosis;"
},
{
"id": "q16",
"title": "Doctors with no appointments",
"difficulty": "Intermediate",
"description": "List doctors who have not had any appointments.",
"hint": "Use a LEFT JOIN and check for NULL in the appointments table.",
"expected_sql": "SELECT d.name FROM doctors d LEFT JOIN appointments a ON d.doctor_id = a.doctor_id WHERE a.appointment_id IS NULL;"
},
{
"id": "q17",
"title": "Patients seen by multiple doctors",
"difficulty": "Intermediate",
"description": "Find patients who have appointments with more than one distinct doctor.",
"hint": "Join patients and appointments, group by patient, and use HAVING clause.",
"expected_sql": "SELECT p.name, COUNT(DISTINCT a.doctor_id) AS doctor_count FROM patients p JOIN appointments a ON p.patient_id = a.patient_id GROUP BY p.name HAVING COUNT(DISTINCT a.doctor_id) > 1;"
},
{
"id": "q18",
"title": "Appointments in July 2023",
"difficulty": "Intermediate",
"description": "List all appointments between July 1, 2023, and July 31, 2023.",
"hint": "Use a BETWEEN clause for the date range.",
"expected_sql": "SELECT appointment_id, patient_id, doctor_id, appointment_date FROM appointments WHERE appointment_date BETWEEN '2023-07-01' AND '2023-07-31';"
},
{
"id": "q19",
"title": "Most common diagnosis",
"difficulty": "Intermediate",
"description": "Find the diagnosis with the highest number of appointments.",
"hint": "Group by diagnosis, count appointments, and use LIMIT.",
"expected_sql": "SELECT diagnosis, COUNT(appointment_id) AS diagnosis_count FROM appointments GROUP BY diagnosis ORDER BY diagnosis_count DESC LIMIT 1;"
},
{
"id": "q20",
"title": "Unique patients by specialty",
"difficulty": "Intermediate",
"description": "Show the number of unique patients seen by each doctor specialty.",
"hint": "Join doctors and appointments, use COUNT and DISTINCT, group by specialty.",
"expected_sql": "SELECT d.specialty, COUNT(DISTINCT a.patient_id) AS unique_patients FROM doctors d JOIN appointments a ON d.doctor_id = a.doctor_id GROUP BY d.specialty;"
},
{
"id": "q21",
"title": "Patient age at appointment",
"difficulty": "Advanced",
"description": "Calculate the age of each patient at the time of their appointment.",
"hint": "Join patients and appointments, use JULIANDAY for age calculation.",
"expected_sql": "SELECT p.name, a.appointment_date, ROUND((JULIANDAY(a.appointment_date) - JULIANDAY(p.dob)) / 365.25, 1) AS age FROM patients p JOIN appointments a ON p.patient_id = a.patient_id;"
},
{
"id": "q22",
"title": "Most active doctor",
"difficulty": "Advanced",
"description": "Find the doctor with the highest number of appointments.",
"hint": "Join doctors and appointments, group by doctor name, and use LIMIT.",
"expected_sql": "SELECT d.name, COUNT(a.appointment_id) AS appointment_count FROM doctors d JOIN appointments a ON d.doctor_id = a.doctor_id GROUP BY d.name ORDER BY appointment_count DESC LIMIT 1;"
},
{
"id": "q23",
"title": "Patients seen by Cardiologist",
"difficulty": "Advanced",
"description": "List all patients who have seen a Cardiologist, including their diagnoses.",
"hint": "Join all tables and filter by doctor specialty.",
"expected_sql": "SELECT DISTINCT p.name, a.diagnosis FROM patients p JOIN appointments a ON p.patient_id = a.patient_id JOIN doctors d ON a.doctor_id = d.doctor_id WHERE d.specialty = 'Cardiologist';"
},
{
"id": "q24",
"title": "Diagnosis frequency by doctor",
"difficulty": "Advanced",
"description": "Show the number of times each diagnosis was made by each doctor.",
"hint": "Join doctors and appointments, group by doctor name and diagnosis.",
"expected_sql": "SELECT d.name, a.diagnosis, COUNT(a.appointment_id) AS diagnosis_count FROM doctors d JOIN appointments a ON d.doctor_id = a.doctor_id GROUP BY d.name, a.diagnosis;"
},
{
"id": "q25",
"title": "Appointments per month",
"difficulty": "Advanced",
"description": "Show the number of appointments per month in 2023.",
"hint": "Use STRFTIME to extract the month and GROUP BY.",
"expected_sql": "SELECT STRFTIME('%Y-%m', appointment_date) AS month, COUNT(appointment_id) AS appointment_count FROM appointments GROUP BY month;"
},
{
"id": "q26",
"title": "Youngest patient per doctor",
"difficulty": "Advanced",
"description": "Find the youngest patient seen by each doctor.",
"hint": "Join tables, calculate age using JULIANDAY, and group by doctor.",
"expected_sql": "SELECT d.name, p.name AS patient_name, MIN(ROUND((JULIANDAY(a.appointment_date) - JULIANDAY(p.dob)) / 365.25, 1)) AS age FROM doctors d JOIN appointments a ON d.doctor_id = a.doctor_id JOIN patients p ON a.patient_id = p.patient_id GROUP BY d.name;"
},
{
"id": "q27",
"title": "Patients with multiple specialties",
"difficulty": "Advanced",
"description": "List patients who have seen doctors from more than one specialty.",
"hint": "Join tables, count distinct specialties, and use HAVING clause.",
"expected_sql": "SELECT p.name, COUNT(DISTINCT d.specialty) AS specialty_count FROM patients p JOIN appointments a ON p.patient_id = a.patient_id JOIN doctors d ON a.doctor_id = d.doctor_id GROUP BY p.name HAVING COUNT(DISTINCT d.specialty) > 1;"
},
{
"id": "q28",
"title": "Unique diagnoses per doctor",
"difficulty": "Advanced",
"description": "Show the number of unique diagnoses made by each doctor.",
"hint": "Join doctors and appointments, use COUNT and DISTINCT, group by doctor name.",
"expected_sql": "SELECT d.name, COUNT(DISTINCT a.diagnosis) AS unique_diagnoses FROM doctors d JOIN appointments a ON d.doctor_id = a.doctor_id GROUP BY d.name;"
},
{
"id": "q29",
"title": "Patients not seen by Neurologist",
"difficulty": "Advanced",
"description": "List patients who have never been seen by a Neurologist.",
"hint": "Use NOT IN or LEFT JOIN to exclude patients with Neurologist appointments.",
"expected_sql": "SELECT p.name FROM patients p WHERE p.patient_id NOT IN (SELECT a.patient_id FROM appointments a JOIN doctors d ON a.doctor_id = d.doctor_id WHERE d.specialty = 'Neurologist');"
},
{
"id": "q30",
"title": "Earliest and latest appointment per patient",
"difficulty": "Advanced",
"description": "Show the earliest and latest appointment dates for each patient with appointments.",
"hint": "Join patients and appointments, use MIN and MAX on appointment_date.",
"expected_sql": "SELECT p.name, MIN(a.appointment_date) AS earliest_appointment, MAX(a.appointment_date) AS latest_appointment FROM patients p JOIN appointments a ON p.patient_id = a.patient_id GROUP BY p.name;"
}
]