Problem
Table: Actions
+---------------+---------+
| Column Name | Type |
+---------------+---------+
| user_id | int |
| post_id | int |
| action_date | date |
| action | enum |
| extra | varchar |
+---------------+---------+
This table may have duplicate rows.
The action column is an ENUM (category) type of ('view', 'like', 'reaction', 'comment', 'report', 'share').
The extra column has optional information about the action, such as a reason for the report or a type of reaction.
extra is never NULL.
Write a solution to report the number of posts reported yesterday for each report reason. Assume today is 2019-07-05
.
Return the result table in any order.
The result format is in the following example.
Examples
Example 1:
|
|
Solution
Method 1 - Count Reports by Reason (SQL & Pandas)
Intuition
We need to count, for each report reason, how many posts were reported yesterday (2019-07-04). Only rows with action = ‘report’ and action_date = ‘2019-07-04’ matter. The ’extra’ column contains the report reason.
Approach
- Filter the
Actions
table for rows whereaction = 'report'
andaction_date = '2019-07-04'
. - Group by the
extra
column (the report reason). - Count the number of unique
post_id
for each reason (as per the example, each post is counted once per reason, even if reported multiple times). - Return the reason and the count.
Code
|
|
|
|
|
|
Complexity
- ⏰ Time complexity: O(N), where N is the number of rows in Actions.
- 🧺 Space complexity: O(R), where R is the number of unique report reasons for that day.