Formatted question description: https://leetcode.ca/all/1149.html

1149. Article Views II

Level

Medium

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_id and viewer_id indicate the same person.

Write an SQL query to find all the people who viewed more than one article on the same date, sorted in ascending order by their id.

The query result format is in the following example:

Views table:
+------------+-----------+-----------+------------+
| article_id | author_id | viewer_id | view_date  |
+------------+-----------+-----------+------------+
| 1          | 3         | 5         | 2019-08-01 |
| 3          | 4         | 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 |
+------------+-----------+-----------+------------+

Result table:
+------+
| id   |
+------+
| 5    |
| 6    |
+------+

Solution

Select the viewer_id from table Views and change the name to id in the result. Use distinct to avoid duplicates. Use group by viewer_id, view_date to query the results according to viewers and dates. The selection criteria is count(distinct article_id) >= 2. Finally, sort the result according to viewer_id.

# Write your MySQL query statement below
select distinct viewer_id as id from Views group by viewer_id, view_date
    having count(distinct article_id) >= 2
    order by viewer_id asc;

All Problems

All Solutions