1919.(Hard)Leetcodify Similar Friends

Table: Listens

+-------------+---------+
| Column Name | Type    |
+-------------+---------+
| user_id     | int     |
| song_id     | int     |
| day         | date    |
+-------------+---------+
该表没有主键,因此会存在重复的行。
该表的每一行所代表的含义是:用户(user_id)在某天(day)听了某首歌曲(song_id)。

Table: Friendship

+---------------+---------+
| Column Name   | Type    |
+---------------+---------+
| user1_id      | int     |
| user2_id      | int     |
+---------------+---------+
(user1_id, user2_id) 是该表的主键。
该表的每一行所代表的含义是,用户(user1_id, user2_id)是朋友。
注意:user1_id < user2_id。

请写一段SQL查询获取到兴趣相同的朋友。用户 x 和 用户 y 是兴趣相同的朋友,需满足下述条件:

  • 用户 x 和 y 是朋友,并且

  • 用户 x and y 在同一天内听过相同的歌曲,且数量大于等于三首.

结果表无需排序。

注意:返回的结果需要和源数据表的呈现方式相同 (例如, 需满足 user1_id < user2_id)。

结果表的格式如下例:

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/leetcodify-similar-friends

著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

Solution

  • 子查询 t 里 两次关联 Listens 表,并筛选出 同一天、同一首歌 l1.song_id = l2.song_id and l1.day = l2.day

  • 一天之内 听了 3首不同的

    • GROUP BY 的时候必须要加 day

    • song_id 必须要 DISTINCT

Schema

Last updated

Was this helpful?