按两个字段分组,并在第一个字段上使用 count()

蒋艾伦*_*蒋艾伦 4 oracle group-by having

我有一个存储用户播放列表的表,一个视频可以被多个用户多次查看。A记录是这样的:

videoid, userid, time
123,     abc   , 2013-09-11
Run Code Online (Sandbox Code Playgroud)

表示用户(abc)在 2013-09-11 观看了视频(123)

现在我想找到不同用户观看的视频列表(没有重复),并且只显示观看了两个以上视频的用户

SELECT videoid, userid 
FROM table_play_list
WHERE SOME CONDICTION
GROUP BY userid, videoid
Run Code Online (Sandbox Code Playgroud)

sql 只选择不同的用户观看列表,我还想过滤观看了两个以上不同视频的用户。

我知道我必须先谷歌并阅读文档,有人说“HAVING”可以解决这个问题,不幸的是,我无法做到。

Gor*_*off 6

如果我理解正确,您正在寻找观看两个以上不同视频的用户。您可以通过使用count(distinct)withpartition by子句来做到这一点:

select userid, videoid
from (SELECT userid, videoid, count(distinct videoid) over (partition by userid) as cnt
      FROM table_play_list
      WHERE <ANY CONDITION>
     ) t
where cnt > 2;
Run Code Online (Sandbox Code Playgroud)