蒋艾伦*_*蒋艾伦 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”可以解决这个问题,不幸的是,我无法做到。
如果我理解正确,您正在寻找观看两个以上不同视频的用户。您可以通过使用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)