如果大于3,则为每个用户选择mysql

时间:2016-03-23 12:18:57

标签: mysql count group-by

我有以下mysql表(真正的表实际上非常庞大,大约有200万行):

----------------------------
userId | artistId | trackId
----------------------------
user1  | artist1  | track1
-------|----------|--------
user1  | artist1  | track1
-------|----------|--------
user1  | artist1  | track1
-------|----------|--------
user2  | artist1  | track1
-------|----------|--------
user2  | artist2  | track2
-------|----------|--------
user2  | artist2  | track2
-------|----------|--------
 ....  |   ....   |  ....

我想要的是:对于每个用户,选择用户收听超过3个不同曲目的艺术家(即同一艺术家的3首曲目)。这是因为我需要将此选择视为艺术家的用户偏好,因此,例如,如果用户仅收听艺术家的一首或两首曲目,我不想将其视为"偏好/喜欢& #34 ;. 这是我写的查询,但我不确定这是否正确:

select p.userId, p.artistId, p.trackId 
from lastfm_part2 p 
join 
(select userId, artistId, trackId 
from lastfm_part2 
group by userId, artistId, trackId 
having count(trackId) > 3) as m 
on m.userId = p.userId and m.artistId = p.artistId and p.trackID = m.trackId

PS。我需要返回所有行,即使它们看似重复(相同的用户,相同的轨道,相同的艺术家),但实际上它们与不同的时间戳有关。 如果有人帮我理解这个查询是否正确,我感激不尽。

由于

1 个答案:

答案 0 :(得分:0)

我在Oracle中测试过,所以也许MySQL有点不同,但下一个查询对我有用。

SELECT p.userId, p.artistId, COUNT( DISTINCT p.trackId )
FROM lastfm_part2
group by userId, artistId
having count( DISTINCT p.trackId ) > 3;
相关问题