Krishna Prakash
Initial commit For SQL Practice Platform
e7cf806
[
{
"id": "q1",
"title": "List all science fiction books",
"difficulty": "Beginner",
"description": "Retrieve the titles and authors of all books in the Science Fiction genre.",
"hint": "Use a WHERE clause to filter by genre.",
"expected_sql": "SELECT title, author FROM books WHERE genre = 'Science Fiction';"
},
{
"id": "q2",
"title": "Find books with low availability",
"difficulty": "Beginner",
"description": "Show books with fewer than 2 available copies.",
"hint": "Use a WHERE clause to filter by available_copies.",
"expected_sql": "SELECT title, available_copies FROM books WHERE available_copies < 2;"
},
{
"id": "q3",
"title": "List loans for user ID 101",
"difficulty": "Beginner",
"description": "Retrieve all loan details for the user with ID 101.",
"hint": "Use a WHERE clause to filter by user_id.",
"expected_sql": "SELECT loan_id, book_id, issue_date, due_date FROM loans WHERE user_id = 101;"
},
{
"id": "q4",
"title": "Find books published after 2000",
"difficulty": "Beginner",
"description": "Show titles and publication years of books published after 2000.",
"hint": "Use a WHERE clause with year comparison.",
"expected_sql": "SELECT title, year FROM books WHERE year > 2000;"
},
{
"id": "q5",
"title": "List unique genres",
"difficulty": "Beginner",
"description": "Retrieve all unique genres from the books table.",
"hint": "Use DISTINCT to avoid duplicate genres.",
"expected_sql": "SELECT DISTINCT genre FROM books;"
},
{
"id": "q6",
"title": "Find overdue loans",
"difficulty": "Beginner",
"description": "Show loans that are overdue as of '2023-03-01' (due_date before '2023-03-01' and not returned).",
"hint": "Use a WHERE clause to check due_date and NULL return_date.",
"expected_sql": "SELECT loan_id, book_id, due_date FROM loans WHERE due_date < '2023-03-01' AND return_date IS NULL;"
},
{
"id": "q7",
"title": "List users joined after 2020",
"difficulty": "Beginner",
"description": "Show names and emails of users who joined after December 31, 2020.",
"hint": "Use a WHERE clause with membership_date.",
"expected_sql": "SELECT name, email FROM users WHERE membership_date > '2020-12-31';"
},
{
"id": "q8",
"title": "Books by George Orwell",
"difficulty": "Beginner",
"description": "Retrieve all books written by George Orwell.",
"hint": "Use a WHERE clause to filter by author.",
"expected_sql": "SELECT title, genre FROM books WHERE author = 'George Orwell';"
},
{
"id": "q9",
"title": "List active loans",
"difficulty": "Beginner",
"description": "Show all loans that have not been returned.",
"hint": "Use a WHERE clause to check for NULL return_date.",
"expected_sql": "SELECT loan_id, book_id, user_id, issue_date FROM loans WHERE return_date IS NULL;"
},
{
"id": "q10",
"title": "List books by publication year",
"difficulty": "Beginner",
"description": "Show all book titles and their publication years, ordered by year ascending.",
"hint": "Use ORDER BY clause on year.",
"expected_sql": "SELECT title, year FROM books ORDER BY year ASC;"
},
{
"id": "q11",
"title": "Count loans per book",
"difficulty": "Intermediate",
"description": "Show the number of loans for each book, including books with zero loans.",
"hint": "Use a LEFT JOIN and GROUP BY book title.",
"expected_sql": "SELECT b.title, COUNT(l.loan_id) AS loan_count FROM books b LEFT JOIN loans l ON b.book_id = l.book_id GROUP BY b.title;"
},
{
"id": "q12",
"title": "Total loans per user",
"difficulty": "Intermediate",
"description": "Calculate the total number of loans for each user, including users with zero loans.",
"hint": "Use a LEFT JOIN and GROUP BY user name.",
"expected_sql": "SELECT u.name, COUNT(l.loan_id) AS total_loans FROM users u LEFT JOIN loans l ON u.user_id = l.user_id GROUP BY u.name;"
},
{
"id": "q13",
"title": "Books by genre count",
"difficulty": "Intermediate",
"description": "Count the number of books in each genre.",
"hint": "Use GROUP BY on genre and COUNT.",
"expected_sql": "SELECT genre, COUNT(book_id) AS book_count FROM books GROUP BY genre;"
},
{
"id": "q14",
"title": "Active loans by genre",
"difficulty": "Intermediate",
"description": "Show the number of active loans (not returned) for each book genre.",
"hint": "Join books and loans, filter by NULL return_date, and GROUP BY genre.",
"expected_sql": "SELECT b.genre, COUNT(l.loan_id) AS active_loans FROM books b JOIN loans l ON b.book_id = l.book_id WHERE l.return_date IS NULL GROUP BY b.genre;"
},
{
"id": "q15",
"title": "Users with multiple loans",
"difficulty": "Intermediate",
"description": "Find users who have taken out more than one loan.",
"hint": "Use GROUP BY on user name and HAVING clause.",
"expected_sql": "SELECT u.name, COUNT(l.loan_id) AS loan_count FROM users u JOIN loans l ON u.user_id = l.user_id GROUP BY u.name HAVING COUNT(l.loan_id) > 1;"
},
{
"id": "q16",
"title": "Books never loaned",
"difficulty": "Intermediate",
"description": "List books that have never been loaned.",
"hint": "Use a LEFT JOIN and check for NULL in the loans table.",
"expected_sql": "SELECT b.title FROM books b LEFT JOIN loans l ON b.book_id = l.book_id WHERE l.loan_id IS NULL;"
},
{
"id": "q17",
"title": "Loan details with book and user",
"difficulty": "Intermediate",
"description": "Show loan details including book title, user name, and issue date for all loans.",
"hint": "Join books, users, and loans tables.",
"expected_sql": "SELECT l.loan_id, b.title, u.name, l.issue_date FROM loans l JOIN books b ON l.book_id = b.book_id JOIN users u ON l.user_id = u.user_id;"
},
{
"id": "q18",
"title": "Books loaned in 2022",
"difficulty": "Intermediate",
"description": "List all books that were loaned in 2022.",
"hint": "Use a WHERE clause with LIKE on issue_date and JOIN with books.",
"expected_sql": "SELECT DISTINCT b.title FROM books b JOIN loans l ON b.book_id = l.book_id WHERE l.issue_date LIKE '2022%';"
},
{
"id": "q19",
"title": "Average loan duration for returned books",
"difficulty": "Intermediate",
"description": "Calculate the average number of days for loans that have been returned.",
"hint": "Use JULIANDAY to calculate date difference and AVG.",
"expected_sql": "SELECT AVG(JULIANDAY(return_date) - JULIANDAY(issue_date)) AS avg_loan_days FROM loans WHERE return_date IS NOT NULL;"
},
{
"id": "q20",
"title": "Most popular author by loans",
"difficulty": "Intermediate",
"description": "Find the author with the most loans.",
"hint": "Join books and loans, GROUP BY author, and use LIMIT.",
"expected_sql": "SELECT b.author, COUNT(l.loan_id) AS loan_count FROM books b JOIN loans l ON b.book_id = l.book_id GROUP BY b.author ORDER BY loan_count DESC LIMIT 1;"
},
{
"id": "q21",
"title": "Overdue loans with user details",
"difficulty": "Advanced",
"description": "Show user names, book titles, and days overdue for loans not returned by '2023-03-01'.",
"hint": "Join tables, filter for overdue loans, and calculate days overdue.",
"expected_sql": "SELECT u.name, b.title, ROUND(JULIANDAY('2023-03-01') - JULIANDAY(l.due_date), 1) AS days_overdue FROM loans l JOIN books b ON l.book_id = b.book_id JOIN users u ON l.user_id = u.user_id WHERE l.due_date < '2023-03-01' AND l.return_date IS NULL;"
},
{
"id": "q22",
"title": "Most active user by loan duration",
"difficulty": "Advanced",
"description": "Find the user with the highest total loan duration for returned books.",
"hint": "Join users and loans, calculate duration, GROUP BY user, and use LIMIT.",
"expected_sql": "SELECT u.name, SUM(JULIANDAY(l.return_date) - JULIANDAY(l.issue_date)) AS total_loan_days FROM users u JOIN loans l ON u.user_id = l.user_id WHERE l.return_date IS NOT NULL GROUP BY u.name ORDER BY total_loan_days DESC LIMIT 1;"
},
{
"id": "q23",
"title": "Books with high demand",
"difficulty": "Advanced",
"description": "Identify books with more loans than their available copies.",
"hint": "Join books and loans, GROUP BY book, and use HAVING clause.",
"expected_sql": "SELECT b.title, COUNT(l.loan_id) AS loan_count, b.available_copies FROM books b JOIN loans l ON b.book_id = l.book_id GROUP BY b.title, b.available_copies HAVING COUNT(l.loan_id) > b.available_copies;"
},
{
"id": "q24",
"title": "Longest overdue loan",
"difficulty": "Advanced",
"description": "Find the loan with the longest overdue period as of '2023-03-01'.",
"hint": "Calculate days overdue, filter for overdue loans, and use LIMIT.",
"expected_sql": "SELECT l.loan_id, b.title, ROUND(JULIANDAY('2023-03-01') - JULIANDAY(l.due_date), 1) AS days_overdue FROM loans l JOIN books b ON l.book_id = b.book_id WHERE l.return_date IS NULL AND l.due_date < '2023-03-01' ORDER BY days_overdue DESC LIMIT 1;"
},
{
"id": "q25",
"title": "Loan activity by month",
"difficulty": "Advanced",
"description": "Show the number of loans issued per month in 2022 and 2023.",
"hint": "Use STRFTIME to extract the month and GROUP BY.",
"expected_sql": "SELECT STRFTIME('%Y-%m', issue_date) AS month, COUNT(loan_id) AS loan_count FROM loans GROUP BY month;"
},
{
"id": "q26",
"title": "Users with no returns",
"difficulty": "Advanced",
"description": "List users who have loans but no returned books.",
"hint": "Use JOIN and check for NULL return_date with HAVING clause.",
"expected_sql": "SELECT u.name FROM users u JOIN loans l ON u.user_id = l.user_id GROUP BY u.name HAVING COUNT(l.return_date) = 0;"
},
{
"id": "q27",
"title": "Books loaned by multiple users",
"difficulty": "Advanced",
"description": "Find books that have been loaned by more than one distinct user.",
"hint": "Use COUNT and DISTINCT on user_id, GROUP BY book title.",
"expected_sql": "SELECT b.title, COUNT(DISTINCT l.user_id) AS user_count FROM books b JOIN loans l ON b.book_id = l.book_id GROUP BY b.title HAVING COUNT(DISTINCT l.user_id) > 1;"
},
{
"id": "q28",
"title": "Average loan duration by genre",
"difficulty": "Advanced",
"description": "Calculate the average loan duration for returned books by genre.",
"hint": "Join books and loans, calculate duration, and GROUP BY genre.",
"expected_sql": "SELECT b.genre, AVG(JULIANDAY(l.return_date) - JULIANDAY(l.issue_date)) AS avg_loan_days FROM books b JOIN loans l ON b.book_id = l.book_id WHERE l.return_date IS NOT NULL GROUP BY b.genre;"
},
{
"id": "q29",
"title": "Users borrowing all science fiction books",
"difficulty": "Advanced",
"description": "List users who have borrowed every book in the Science Fiction genre.",
"hint": "Count distinct Science Fiction books per user and compare with total Science Fiction books.",
"expected_sql": "SELECT u.name FROM users u JOIN loans l ON u.user_id = l.user_id JOIN books b ON l.book_id = b.book_id WHERE b.genre = 'Science Fiction' GROUP BY u.name HAVING COUNT(DISTINCT b.book_id) = (SELECT COUNT(*) FROM books WHERE genre = 'Science Fiction');"
},
{
"id": "q30",
"title": "Earliest and latest loan per book",
"difficulty": "Advanced",
"description": "Show the earliest and latest issue dates for each book that has been loaned.",
"hint": "Use MIN and MAX on issue_date, GROUP BY book title.",
"expected_sql": "SELECT b.title, MIN(l.issue_date) AS earliest_loan, MAX(l.issue_date) AS latest_loan FROM books b JOIN loans l ON b.book_id = l.book_id GROUP BY b.title;"
}
]