+-------------+---------+
| 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。
SELECT DISTINCT user1_id, user2_id
FROM (
SELECT user1_id, user2_id, l1.song_id, l1.day
FROM Friendship f LEFT JOIN Listens l1 on f.user1_id = l1.user_id
LEFT JOIN Listens l2 on f.user2_id = l2.user_id
WHERE l1.song_id = l2.song_id and l1.day = l2.day
) t
GROUP BY user1_id, user2_id, day
HAVING COUNT(DISTINCT song_id)>=3;
Create table If Not Exists Listens (user_id int, song_id int, day date);
Create table If Not Exists Friendship (user1_id int, user2_id int);
Truncate table Listens;
insert into Listens (user_id, song_id, day) values ('1', '10', '2021-03-15');
insert into Listens (user_id, song_id, day) values ('1', '11', '2021-03-15');
insert into Listens (user_id, song_id, day) values ('1', '12', '2021-03-15');
insert into Listens (user_id, song_id, day) values ('2', '10', '2021-03-15');
insert into Listens (user_id, song_id, day) values ('2', '11', '2021-03-15');
insert into Listens (user_id, song_id, day) values ('2', '12', '2021-03-15');
insert into Listens (user_id, song_id, day) values ('3', '10', '2021-03-15');
insert into Listens (user_id, song_id, day) values ('3', '11', '2021-03-15');
insert into Listens (user_id, song_id, day) values ('3', '12', '2021-03-15');
insert into Listens (user_id, song_id, day) values ('4', '10', '2021-03-15');
insert into Listens (user_id, song_id, day) values ('4', '11', '2021-03-15');
insert into Listens (user_id, song_id, day) values ('4', '13', '2021-03-15');
insert into Listens (user_id, song_id, day) values ('5', '10', '2021-03-16');
insert into Listens (user_id, song_id, day) values ('5', '11', '2021-03-16');
insert into Listens (user_id, song_id, day) values ('5', '12', '2021-03-16');
Truncate table Friendship;
insert into Friendship (user1_id, user2_id) values ('1', '2');
insert into Friendship (user1_id, user2_id) values ('2', '4');
insert into Friendship (user1_id, user2_id) values ('2', '5');
-- case
Truncate table Listens;
Truncate table Friendship;
insert into Listens (user_id, song_id, day) values (4,1787,"2021-07-06");
insert into Listens (user_id, song_id, day) values (4,1787,"2021-07-18");
insert into Listens (user_id, song_id, day) values (4,1787,"2021-07-26");
insert into Listens (user_id, song_id, day) values (4,1787,"2021-07-22");
insert into Listens (user_id, song_id, day) values (4,1787,"2021-07-07");
insert into Listens (user_id, song_id, day) values (4,1129,"2021-07-29");
insert into Listens (user_id, song_id, day) values (4,1129,"2021-07-24");
insert into Listens (user_id, song_id, day) values (4,1129,"2021-07-05");
insert into Listens (user_id, song_id, day) values (4,1129,"2021-07-04");
insert into Listens (user_id, song_id, day) values (4,1129,"2021-07-29");
insert into Listens (user_id, song_id, day) values (4,1358,"2021-07-11");
insert into Listens (user_id, song_id, day) values (4,1358,"2021-07-02");
insert into Listens (user_id, song_id, day) values (4,1358,"2021-07-07");
insert into Listens (user_id, song_id, day) values (4,1358,"2021-07-01");
insert into Listens (user_id, song_id, day) values (4,1358,"2021-07-18");
insert into Listens (user_id, song_id, day) values (4,1358,"2021-07-03");
insert into Listens (user_id, song_id, day) values (12,1787,"2021-07-17");
insert into Listens (user_id, song_id, day) values (12,1787,"2021-07-12");
insert into Listens (user_id, song_id, day) values (12,1787,"2021-07-06");
insert into Listens (user_id, song_id, day) values (12,1787,"2021-07-17");
insert into Listens (user_id, song_id, day) values (12,1787,"2021-07-22");
insert into Listens (user_id, song_id, day) values (12,1129,"2021-07-31");
insert into Listens (user_id, song_id, day) values (12,1129,"2021-07-16");
insert into Listens (user_id, song_id, day) values (12,1129,"2021-07-28");
insert into Listens (user_id, song_id, day) values (12,1129,"2021-07-08");
insert into Listens (user_id, song_id, day) values (12,1129,"2021-07-28");
insert into Listens (user_id, song_id, day) values (12,1129,"2021-07-14");
insert into Listens (user_id, song_id, day) values (12,1129,"2021-07-26");
insert into Listens (user_id, song_id, day) values (12,1358,"2021-07-28");
insert into Listens (user_id, song_id, day) values (12,1358,"2021-07-31");
insert into Listens (user_id, song_id, day) values (12,1358,"2021-07-21");
insert into Listens (user_id, song_id, day) values (12,1358,"2021-07-19");
insert into Listens (user_id, song_id, day) values (13,1787,"2021-07-28");
insert into Listens (user_id, song_id, day) values (13,1787,"2021-07-25");
insert into Listens (user_id, song_id, day) values (13,1787,"2021-07-20");
insert into Listens (user_id, song_id, day) values (13,1787,"2021-07-22");
insert into Listens (user_id, song_id, day) values (13,1787,"2021-07-11");
insert into Listens (user_id, song_id, day) values (13,1787,"2021-07-26");
insert into Listens (user_id, song_id, day) values (13,1129,"2021-07-19");
insert into Listens (user_id, song_id, day) values (13,1129,"2021-07-08");
insert into Listens (user_id, song_id, day) values (13,1129,"2021-07-23");
insert into Listens (user_id, song_id, day) values (13,1129,"2021-07-25");
insert into Listens (user_id, song_id, day) values (13,1129,"2021-07-14");
insert into Listens (user_id, song_id, day) values (13,1358,"2021-07-11");
insert into Listens (user_id, song_id, day) values (13,1358,"2021-07-03");
insert into Listens (user_id, song_id, day) values (13,1358,"2021-07-26");
insert into Listens (user_id, song_id, day) values (13,1358,"2021-07-20");
insert into Listens (user_id, song_id, day) values (13,1358,"2021-07-02");
insert into Listens (user_id, song_id, day) values (13,1358,"2021-07-29");
insert into Listens (user_id, song_id, day) values (13,1358,"2021-07-17");
insert into Listens (user_id, song_id, day) values (2,1787,"2021-07-30");
insert into Listens (user_id, song_id, day) values (2,1787,"2021-07-24");
insert into Listens (user_id, song_id, day) values (2,1787,"2021-07-13");
insert into Listens (user_id, song_id, day) values (2,1787,"2021-07-14");
insert into Listens (user_id, song_id, day) values (2,1787,"2021-07-15");
insert into Listens (user_id, song_id, day) values (2,1787,"2021-07-16");
insert into Listens (user_id, song_id, day) values (2,1129,"2021-07-04");
insert into Listens (user_id, song_id, day) values (2,1129,"2021-07-21");
insert into Listens (user_id, song_id, day) values (2,1129,"2021-07-24");
insert into Listens (user_id, song_id, day) values (2,1129,"2021-07-02");
insert into Listens (user_id, song_id, day) values (2,1129,"2021-07-09");
insert into Listens (user_id, song_id, day) values (2,1129,"2021-07-18");
insert into Listens (user_id, song_id, day) values (2,1129,"2021-07-04");
insert into Listens (user_id, song_id, day) values (2,1358,"2021-07-10");
insert into Listens (user_id, song_id, day) values (2,1358,"2021-07-09");
insert into Listens (user_id, song_id, day) values (2,1358,"2021-07-16");
insert into Listens (user_id, song_id, day) values (2,1358,"2021-07-18");
insert into Listens (user_id, song_id, day) values (7,1787,"2021-07-17");
insert into Listens (user_id, song_id, day) values (7,1787,"2021-07-08");
insert into Listens (user_id, song_id, day) values (7,1787,"2021-07-24");
insert into Listens (user_id, song_id, day) values (7,1787,"2021-07-04");
insert into Listens (user_id, song_id, day) values (7,1787,"2021-07-23");
insert into Listens (user_id, song_id, day) values (7,1787,"2021-07-31");
insert into Listens (user_id, song_id, day) values (7,1129,"2021-07-18");
insert into Listens (user_id, song_id, day) values (7,1129,"2021-07-27");
insert into Listens (user_id, song_id, day) values (7,1129,"2021-07-30");
insert into Listens (user_id, song_id, day) values (7,1129,"2021-07-11");
insert into Listens (user_id, song_id, day) values (7,1129,"2021-07-26");
insert into Listens (user_id, song_id, day) values (7,1129,"2021-07-11");
insert into Listens (user_id, song_id, day) values (7,1129,"2021-07-05");
insert into Listens (user_id, song_id, day) values (7,1358,"2021-07-10");
insert into Listens (user_id, song_id, day) values (7,1358,"2021-07-05");
insert into Listens (user_id, song_id, day) values (7,1358,"2021-07-14");
insert into Listens (user_id, song_id, day) values (7,1358,"2021-07-03");
insert into Listens (user_id, song_id, day) values (7,1358,"2021-07-23");
insert into Listens (user_id, song_id, day) values (8,1787,"2021-07-15");
insert into Listens (user_id, song_id, day) values (8,1787,"2021-07-12");
insert into Listens (user_id, song_id, day) values (8,1787,"2021-07-11");
insert into Listens (user_id, song_id, day) values (8,1787,"2021-07-15");
insert into Listens (user_id, song_id, day) values (8,1787,"2021-07-17");
insert into Listens (user_id, song_id, day) values (8,1129,"2021-07-15");
insert into Listens (user_id, song_id, day) values (8,1129,"2021-07-28");
insert into Listens (user_id, song_id, day) values (8,1129,"2021-07-10");
insert into Listens (user_id, song_id, day) values (8,1129,"2021-07-10");
insert into Listens (user_id, song_id, day) values (8,1129,"2021-07-02");
insert into Listens (user_id, song_id, day) values (8,1129,"2021-07-19");
insert into Listens (user_id, song_id, day) values (8,1358,"2021-07-05");
insert into Listens (user_id, song_id, day) values (8,1358,"2021-07-22");
insert into Listens (user_id, song_id, day) values (8,1358,"2021-07-15");
insert into Listens (user_id, song_id, day) values (8,1358,"2021-07-03");
insert into Listens (user_id, song_id, day) values (8,1358,"2021-07-16");
insert into Listens (user_id, song_id, day) values (10,1787,"2021-07-31");
insert into Listens (user_id, song_id, day) values (10,1787,"2021-07-25");
insert into Listens (user_id, song_id, day) values (10,1787,"2021-07-28");
insert into Listens (user_id, song_id, day) values (10,1787,"2021-07-28");
insert into Listens (user_id, song_id, day) values (10,1129,"2021-07-30");
insert into Listens (user_id, song_id, day) values (10,1129,"2021-07-30");
insert into Listens (user_id, song_id, day) values (10,1129,"2021-07-12");
insert into Listens (user_id, song_id, day) values (10,1129,"2021-07-18");
insert into Listens (user_id, song_id, day) values (10,1129,"2021-07-26");
insert into Listens (user_id, song_id, day) values (10,1358,"2021-07-08");
insert into Listens (user_id, song_id, day) values (10,1358,"2021-07-24");
insert into Listens (user_id, song_id, day) values (10,1358,"2021-07-24");
insert into Listens (user_id, song_id, day) values (10,1358,"2021-07-13");
insert into Listens (user_id, song_id, day) values (10,1358,"2021-07-24");
insert into Listens (user_id, song_id, day) values (10,1358,"2021-07-13");
insert into Listens (user_id, song_id, day) values (10,1358,"2021-07-25");
insert into Friendship (user1_id, user2_id) values (4,12);
insert into Friendship (user1_id, user2_id) values (2,4);
insert into Friendship (user1_id, user2_id) values (4,7);
insert into Friendship (user1_id, user2_id) values (4,8);
insert into Friendship (user1_id, user2_id) values (4,10);
insert into Friendship (user1_id, user2_id) values (12,13);
insert into Friendship (user1_id, user2_id) values (2,12);
insert into Friendship (user1_id, user2_id) values (8,12);
insert into Friendship (user1_id, user2_id) values (2,13);
insert into Friendship (user1_id, user2_id) values (7,13);
insert into Friendship (user1_id, user2_id) values (8,13);
insert into Friendship (user1_id, user2_id) values (10,13);
insert into Friendship (user1_id, user2_id) values (2,8);
insert into Friendship (user1_id, user2_id) values (2,10);
insert into Friendship (user1_id, user2_id) values (7,8);
insert into Friendship (user1_id, user2_id) values (7,10);
insert into Friendship (user1_id, user2_id) values (8,10);