parent
5d0a3db1e6
commit
40dd6130d5
3 changed files with 90 additions and 13 deletions
@ -0,0 +1,88 @@ |
||||
--- |
||||
title: Data Analysis Challenge |
||||
description: Practice querying temporal data from a bookstore's sales records |
||||
order: 340 |
||||
type: challenge |
||||
setup: | |
||||
```sql |
||||
CREATE TABLE sales ( |
||||
id INTEGER PRIMARY KEY, |
||||
book_title VARCHAR(100), |
||||
sale_date DATE, |
||||
quantity INTEGER, |
||||
amount DECIMAL(10,2) |
||||
); |
||||
|
||||
INSERT INTO sales (id, book_title, sale_date, quantity, amount) VALUES |
||||
(1, 'The Great Gatsby', '2024-03-15', 2, 25.98), |
||||
(2, 'To Kill a Mockingbird', '2024-03-15', 1, 14.99), |
||||
(3, '1984', '2024-12-10', 3, 35.97), |
||||
(4, 'Pride and Prejudice', '2024-03-16', 1, 9.99), |
||||
(5, 'The Hobbit', '2024-10-17', 2, 33.98), |
||||
(6, 'The Great Gatsby', '2024-03-17', 1, 12.99), |
||||
(7, 'Dune', '2024-05-18', 4, 79.96), |
||||
(8, 'The Hobbit', '2024-03-18', 1, 16.99), |
||||
(9, '1984', '2024-03-19', 2, 23.98), |
||||
(10, 'Pride and Prejudice', '2024-03-19', 3, 29.97); |
||||
``` |
||||
--- |
||||
|
||||
Given the following `sales` table containing the books sales data: |
||||
|
||||
| id | book_title | sale_date | quantity | amount | |
||||
| --- | --------------------- | ---------- | -------- | ------ | |
||||
| 1 | The Great Gatsby | 2024-03-15 | 2 | 25.98 | |
||||
| 2 | To Kill a Mockingbird | 2024-03-15 | 1 | 14.99 | |
||||
| 3 | 1984 | 2024-12-10 | 3 | 35.97 | |
||||
| 4 | Pride and Prejudice | 2024-03-16 | 1 | 9.99 | |
||||
| 5 | The Hobbit | 2024-10-17 | 2 | 33.98 | |
||||
| 6 | The Great Gatsby | 2024-03-17 | 1 | 12.99 | |
||||
| 7 | Dune | 2024-05-18 | 4 | 79.96 | |
||||
| 8 | The Hobbit | 2024-03-18 | 1 | 16.99 | |
||||
| 9 | 1984 | 2024-03-19 | 2 | 23.98 | |
||||
| 10 | Pride and Prejudice | 2024-03-19 | 3 | 29.97 | |
||||
|
||||
with following data types of columns: |
||||
|
||||
| Column | Type | |
||||
| ---------- | ------------- | |
||||
| id | INTEGER | |
||||
| book_title | VARCHAR(100) | |
||||
| sale_date | DATE | |
||||
| quantity | INTEGER | |
||||
| amount | DECIMAL(10,2) | |
||||
|
||||
Write a query to help the store manager find the sales based on the following criteria: |
||||
|
||||
- All sales that happened between `2024-05-16` and `2024-12-18` (inclusive) |
||||
- Only include sales where the `quantity` sold was more than `1` |
||||
- Order the results by `sale_date`, and then by `amount` in descending order |
||||
- Show only the `book_title`, `sale_date`, `quantity`, `sale_quarter` and `amount` columns |
||||
- Format the `sale_date` as `Month Day, Year` e.g. `December 10, 2024` |
||||
- `sale_quarter` should contain the quarter of the year when the sale happened. You can use the `EXTRACT` function to get the quarter of the year from the `sale_date` column. |
||||
- To format the `sale_date` column, you can use the `TO_CHAR` function with `TO_CHAR(sale_date, 'Month DD, YYYY')`. |
||||
|
||||
## Expected Output |
||||
|
||||
The result should look like this: |
||||
|
||||
| book_title | sale_date | quantity | sale_quarter | amount | |
||||
| ---------- | ----------------- | -------- | ------------ | ------ | |
||||
| 1984 | December 10, 2024 | 3 | 4 | 35.97 | |
||||
| The Hobbit | October 17, 2024 | 2 | 4 | 33.98 | |
||||
| Dune | May 18, 2024 | 4 | 2 | 79.96 | |
||||
|
||||
## Solution |
||||
|
||||
```sql |
||||
SELECT |
||||
book_title, |
||||
TO_CHAR(sale_date, 'Month DD, YYYY') AS sale_date, |
||||
quantity, |
||||
EXTRACT(QUARTER FROM sale_date) AS sale_quarter, |
||||
amount |
||||
FROM sales |
||||
WHERE sale_date BETWEEN '2024-05-16' AND '2024-12-18' |
||||
AND quantity > 1 |
||||
ORDER BY sale_date, amount DESC; |
||||
``` |
Loading…
Reference in new issue