diff --git a/problems/ads-performance/README.md b/problems/ads-performance/README.md index 17c8661d2..713d3a9a8 100644 --- a/problems/ads-performance/README.md +++ b/problems/ads-performance/README.md @@ -11,4 +11,60 @@ ## [1322. Ads Performance (Easy)](https://leetcode.com/problems/ads-performance "") +
Table: Ads
++---------------+---------+ +| Column Name | Type | ++---------------+---------+ +| ad_id | int | +| user_id | int | +| action | enum | ++---------------+---------+ +(ad_id, user_id) is the primary key for this table. +Each row of this table contains the ID of an Ad, the ID of a user and the action taken by this user regarding this Ad. +The action column is an ENUM type of ('Clicked', 'Viewed', 'Ignored'). ++ +A company is running Ads and wants to calculate the performance of each Ad. +Performance of the Ad is measured using Click-Through Rate (CTR) where: + +[[image-blog:Leetcode: Ads Performance][https://raw.githubusercontent.com/dennyzhang/code.dennyzhang.com/master/problems/ads-performance/ctrformula.png]] + +Write an SQL query to find the ctr of each Ad. + +Round ctr to 2 decimal points. Order the result table by ctr in descending order and by ad_id in ascending order in case of a tie. + +The query result format is in the following example: +
+Ads table: ++-------+---------+---------+ +| ad_id | user_id | action | ++-------+---------+---------+ +| 1 | 1 | Clicked | +| 2 | 2 | Clicked | +| 3 | 3 | Viewed | +| 5 | 5 | Ignored | +| 1 | 7 | Ignored | +| 2 | 7 | Viewed | +| 3 | 5 | Clicked | +| 1 | 4 | Viewed | +| 2 | 11 | Viewed | +| 1 | 2 | Clicked | ++-------+---------+---------+ +Result table: ++-------+-------+ +| ad_id | ctr | ++-------+-------+ +| 1 | 66.67 | +| 3 | 50.00 | +| 2 | 33.33 | +| 5 | 0.00 | ++-------+-------+ +for ad_id = 1, ctr = (2/(2+1)) * 100 = 66.67 +for ad_id = 2, ctr = (1/(1+2)) * 100 = 33.33 +for ad_id = 3, ctr = (1/(1+1)) * 100 = 50.00 +for ad_id = 5, ctr = 0.00, Note that ad_id has no clicks or views. +Note that we don't care about Ignored Ads. +Result table is ordered by the ctr. in case of a tie we order them by ad_id +diff --git a/problems/list-the-products-ordered-in-a-period/README.md b/problems/list-the-products-ordered-in-a-period/README.md index e33dfda4b..acfd83aae 100644 --- a/problems/list-the-products-ordered-in-a-period/README.md +++ b/problems/list-the-products-ordered-in-a-period/README.md @@ -11,4 +11,80 @@ ## [1327. List the Products Ordered in a Period (Easy)](https://leetcode.com/problems/list-the-products-ordered-in-a-period "") +SQL Schema +
Table: Products
++------------------+---------+ +| Column Name | Type | ++------------------+---------+ +| product_id | int | +| product_name | varchar | +| product_category | varchar | ++------------------+---------+ +product_id is the primary key for this table. +This table contains data about the company's products. ++
Table: Orders
++---------------+---------+ +| Column Name | Type | ++---------------+---------+ +| product_id | int | +| order_date | date | +| unit | int | ++---------------+---------+ +There is no primary key for this table. It may have duplicate rows. +product_id is a foreign key to Products table. +unit is the number of products ordered in order_date. ++ +Write an SQL query to get the names of products with greater than or equal to 100 units ordered in February 2020 and their amount. + +Return result table in any order. + +The query result format is in the following example: +
+Products table: ++-------------+-----------------------+------------------+ +| product_id | product_name | product_category | ++-------------+-----------------------+------------------+ +| 1 | Leetcode Solutions | Book | +| 2 | Jewels of Stringology | Book | +| 3 | HP | Laptop | +| 4 | Lenovo | Laptop | +| 5 | Leetcode Kit | T-shirt | ++-------------+-----------------------+------------------+ + +Orders table: ++--------------+--------------+----------+ +| product_id | order_date | unit | ++--------------+--------------+----------+ +| 1 | 2020-02-05 | 60 | +| 1 | 2020-02-10 | 70 | +| 2 | 2020-01-18 | 30 | +| 2 | 2020-02-11 | 80 | +| 3 | 2020-02-17 | 2 | +| 3 | 2020-02-24 | 3 | +| 4 | 2020-03-01 | 20 | +| 4 | 2020-03-04 | 30 | +| 4 | 2020-03-04 | 60 | +| 5 | 2020-02-25 | 50 | +| 5 | 2020-02-27 | 50 | +| 5 | 2020-03-01 | 50 | ++--------------+--------------+----------+ + +Result table: ++--------------------+---------+ +| product_name | unit | ++--------------------+---------+ +| Leetcode Solutions | 130 | +| Leetcode Kit | 100 | ++--------------------+---------+ + +Products with product_id = 1 is ordered in February a total of (60 + 70) = 130. +Products with product_id = 2 is ordered in February a total of 80. +Products with product_id = 3 is ordered in February a total of (2 + 3) = 5. +Products with product_id = 4 was not ordered in February 2020. +Products with product_id = 5 is ordered in February a total of (50 + 50) = 100. +diff --git a/problems/number-of-transactions-per-visit/README.md b/problems/number-of-transactions-per-visit/README.md index 21309d506..f730c2508 100644 --- a/problems/number-of-transactions-per-visit/README.md +++ b/problems/number-of-transactions-per-visit/README.md @@ -11,4 +11,84 @@ ## [1336. Number of Transactions per Visit (Medium)](https://leetcode.com/problems/number-of-transactions-per-visit "") +
Table: Visits
++---------------+---------+ +| Column Name | Type | ++---------------+---------+ +| user_id | int | +| visit_date | date | ++---------------+---------+ +(user_id, visit_date) is the primary key for this table. +Each row of this table indicates that user_id has visited the bank in visit_date. ++
Table: Transactions
++------------------+---------+ +| Column Name | Type | ++------------------+---------+ +| user_id | int | +| transaction_date | date | +| amount | int | ++------------------+---------+ +There is no primary key for this table, it may contain duplicates. +Each row of this table indicates that user_id has done a transaction of amount in transaction_date. +It is guaranteed that the user has visited the bank in the transaction_date.(i.e The Visits table contains (user_id, transaction_date) in one row) ++ +Write an SQL query to find how many users visited the bank and didn't do any transactions, how many visited the bank and did one transaction and so on. + +The result table will contain two columns transactions_count which is the number of transactions done in one visit and visits_count which is the corresponding number of users who did transactions_count in one visit to the bank. transactions_count should take all values from 0 to max(transactions_count) done by one or more users. + +Order the result table by transactions_count. + +The query result format is in the following example: + +
+Visits table: ++---------+------------+ +| user_id | visit_date | ++---------+------------+ +| 1 | 2020-01-01 | +| 2 | 2020-01-02 | +| 12 | 2020-01-01 | +| 19 | 2020-01-03 | +| 1 | 2020-01-02 | +| 2 | 2020-01-03 | +| 1 | 2020-01-04 | +| 7 | 2020-01-11 | +| 9 | 2020-01-25 | +| 8 | 2020-01-28 | ++---------+------------+ +Transactions table: ++---------+------------------+--------+ +| user_id | transaction_date | amount | ++---------+------------------+--------+ +| 1 | 2020-01-02 | 120 | +| 2 | 2020-01-03 | 22 | +| 7 | 2020-01-11 | 232 | +| 1 | 2020-01-04 | 7 | +| 9 | 2020-01-25 | 33 | +| 9 | 2020-01-25 | 66 | +| 8 | 2020-01-28 | 1 | +| 9 | 2020-01-25 | 99 | ++---------+------------------+--------+ +Result table: ++--------------------+--------------+ +| transactions_count | visits_count | ++--------------------+--------------+ +| 0 | 4 | +| 1 | 5 | +| 2 | 0 | +| 3 | 1 | ++--------------------+--------------+ +Users 1, 2, 12 and 19 visited the bank in 2020-01-01, 2020-01-02, 2020-01-01 and 2020-01-03 respectively, and didn't do any transactions. +So we have visits_count = 4 for transactions_count = 0. +Users 2, 7 and 8 visited the bank in 2020-01-03, 2020-01-11 and 2020-01-28 respectively, and did one transaction. +User 1 Also visited the bank in 2020-01-02 and 2020-01-04 and did one transaction each day. +So we have total visits_count = 5 for transactions_count = 1. +For transactions_count = 2 we don't have any users who visited the bank and did two transactions. +For transactions_count = 3 we have user 9 who visited the bank in 2020-01-25 and did three transactions. +Note that we stopped at transactions_count = 3 as this is the maximum number of transactions done by one user in one visit to the bank. +