0% completed
Problem Statement
Table: Checkouts
This table logs each book checkout from a library, including the date of the checkout and the title of the book.
+----------------+-----------+
| Column Name | Type |
+----------------+-----------+
| checkout_date | date |
| book_title | varchar |
+----------------+-----------+
There is no primary key for this table, and it may contain duplicate rows.
Develop a solution to report the number of distinct book titles checked out and a lexicographically sorted list of these titles for each date.
Example
Input:
Checkouts table: +---------------+-----------------------+ | checkout_date | book_title | +---------------+-----------------------+ | 2020-07-01 | The Hobbit | | 2020-07-01 | 1984 | | 2020-07-02 | War and Peace | | 2020-07-01 | The Hobbit | | 2020-07-02 | Crime and Punishment | | 2020-07-03 | Brave New World | +---------------+-----------------------+
Output:
+---------------+---------------+----------------------------------+ | checkout_date | num_checkouts | book_titles | +---------------+---------------+----------------------------------+ | 2020-07-01 | 2 | 1984,The Hobbit | | 2020-07-02 | 2 | Crime and Punishment,War and Peace| | 2020-07-03 | 1 | Brave New World | +---------------+---------------+----------------------------------+
In this example, the report shows the number of distinct titles checked out on each date and the sorted list of these titles.
Try It Yourself
Solution
To generate a report of distinct book titles checked out each day in a lexicographically sorted list, along with the number of distinct checkouts, we can utilize SQL's aggregation functions and window functions. The solution involves grouping the data by checkout dates, counting distinct book titles, and concatenating these titles in a sorted manner.
- Group by Checkout Date: Aggregate data based on each
checkout_date
to analyze daily checkouts. - Count Distinct Book Titles: Determine the number of unique book titles checked out each day.
- Concatenate Sorted Book Titles: Combine the distinct book titles into a comma-separated, lexicographically sorted string.
- Order the Results: Present the final report ordered by
checkout_date
for clarity.
SQL Query
SELECT checkout_date, COUNT(DISTINCT book_title) AS num_checkouts, GROUP_CONCAT(DISTINCT book_title ORDER BY book_title ASC SEPARATOR ',') AS book_titles FROM Checkouts GROUP BY checkout_date ORDER BY checkout_date;
Step-by-Step Approach
Step 1: Group by Checkout Date and Count Distinct Book Titles
Aggregate the data by each checkout_date
and count the number of unique book_title
s checked out on that date.
SQL Query:
SELECT checkout_date, COUNT(DISTINCT book_title) AS num_checkouts FROM Checkouts GROUP BY checkout_date;
Explanation:
SELECT checkout_date, COUNT(DISTINCT book_title) AS num_checkouts
:- Selects each
checkout_date
and counts the number of distinctbook_title
s associated with that date.
- Selects each
FROM Checkouts
:- Specifies the
Checkouts
table as the data source.
- Specifies the
GROUP BY checkout_date
:- Groups the records by
checkout_date
to perform the aggregation per day.
- Groups the records by
Output After Step 1:
+---------------+--------------+ | checkout_date | num_checkouts| +---------------+--------------+ | 2020-07-01 | 2 | | 2020-07-02 | 2 | | 2020-07-03 | 1 | +---------------+--------------+
Step 2: Concatenate Sorted Distinct Book Titles
Objective:
For each checkout_date
, create a comma-separated list of distinct book_title
s, sorted lexicographically.
SQL Query:
SELECT checkout_date, GROUP_CONCAT(DISTINCT book_title ORDER BY book_title ASC SEPARATOR ',') AS book_titles FROM Checkouts GROUP BY checkout_date;
Explanation:
SELECT checkout_date, GROUP_CONCAT(DISTINCT book_title ORDER BY book_title ASC SEPARATOR ',') AS book_titles
:- Selects each
checkout_date
and concatenates the distinctbook_title
s into a single string, ordered lexicographically and separated by commas.
- Selects each
FROM Checkouts
:- Specifies the
Checkouts
table as the data source.
- Specifies the
GROUP BY checkout_date
:- Groups the records by
checkout_date
to perform the aggregation per day.
- Groups the records by
Output After Step 2:
+---------------+----------------------------------+ | checkout_date | book_titles | +---------------+----------------------------------+ | 2020-07-01 | 1984,The Hobbit | | 2020-07-02 | Crime and Punishment,War and Peace| | 2020-07-03 | Brave New World | +---------------+----------------------------------+
Step 3: Combine Count and Concatenation, and Order by Checkout Date
Merge the results of Steps 1 and 2 to include both the number of distinct checkouts and the sorted list of book titles for each checkout_date
. Finally, order the results by checkout_date
.
SQL Query:
SELECT checkout_date, COUNT(DISTINCT book_title) AS num_checkouts, GROUP_CONCAT(DISTINCT book_title ORDER BY book_title ASC SEPARATOR ',') AS book_titles FROM Checkouts GROUP BY checkout_date ORDER BY checkout_date;
Explanation:
SELECT checkout_date, COUNT(DISTINCT book_title) AS num_checkouts, GROUP_CONCAT(...) AS book_titles
:- Combines the count of distinct book titles and the concatenated list of these titles for each
checkout_date
.
- Combines the count of distinct book titles and the concatenated list of these titles for each
ORDER BY checkout_date
:- Sorts the final output in ascending order based on
checkout_date
.
- Sorts the final output in ascending order based on
Final Output:
+---------------+--------------+----------------------------------+ | checkout_date | num_checkouts| book_titles | +---------------+--------------+----------------------------------+ | 2020-07-01 | 2 | 1984,The Hobbit | | 2020-07-02 | 2 | Crime and Punishment,War and Peace| | 2020-07-03 | 1 | Brave New World | +---------------+--------------+----------------------------------+
.....
.....
.....
Table of Contents
Contents are not accessible
Contents are not accessible
Contents are not accessible
Contents are not accessible
Contents are not accessible