Description
Table: Views
| Column Name | Type |
|---|---|
| article_id | int |
| author_id | int |
| viewer_id | int |
| view_date | date |
- There is no primary key for this table, it may have duplicate rows.
- Each row of this table indicates that some viewer viewed an article (written by some author) on some date.
- Note that equal
author_idandviewer_idindicate the same person.
Problem Statement
Write an SQL query to find all the authors that viewed at least one of their own articles.
Return the result table sorted by id in ascending order.
The query result format is in the following example.
Example 1:
Input:
Viewstable:
| article_id | author_id | viewer_id | view_date |
|---|---|---|---|
| 1 | 3 | 5 | 2019-08-01 |
| 1 | 3 | 6 | 2019-08-02 |
| 2 | 7 | 7 | 2019-08-01 |
| 2 | 7 | 6 | 2019-08-02 |
| 4 | 7 | 1 | 2019-07-22 |
| 3 | 4 | 4 | 2019-07-21 |
| 3 | 4 | 4 | 2019-07-21 |
Output:
| id |
|---|
| 4 |
| 7 |
Solution
You need to find the authors who have viewed one of their own articles. To find out these authors, you can use author_id and viewer_id fields. When both of these are same, that means this author_id author has seen their own article. So, you need to filter the results first by author_id = viewer_id. Finally, you need to order the results by author_id field.
1SELECT DISTINCT author_id id
2 FROM Views
3 WHERE author_id = viewer_id
4 ORDER BY id;


Comments