oracle sql - 加入with with和by by?

时间:2012-04-26 03:11:14

标签: sql oracle

如果我必须查找多次查看同一视频的所有用途,那么我正在使用以下查询。

SELECT userid AS users,video_id 
FROM watching_list GROUP BY userid , video_id HAVING COUNT(*) > 1;

^^它确实给你了吧?如果watching_list包含用户观看的userid和videoid以及日期时间戳。

我想要做的是将它连接到基于userid的用户表,以查找用户名等,而不仅仅是用户ID。

我尝试过简单的加入,当然它打破了我。

2 个答案:

答案 0 :(得分:4)

SELECT Users.Name, Users.userid AS users,video_id 
FROM watching_list 
    JOIN Users
        ON Users.UserID = watching_list.UserID
GROUP BY Users.userid , video_id, Users.Name
HAVING COUNT(*) > 1;

为什么会这样?它应该是同一个用户,因此向group by添加同一个人的其他信息不应导致更改

Here is a crude, quick SQLFiddle to prove this

答案 1 :(得分:3)

这样做有点不合时宜的方式是这样的:

Select USERS.LAST_NAME,
       USERS.FIRST_NAME,
       double_watchers.VIDEO_ID
  FROM USERS,
      (SELECT userid AS users,
              video_id 
         FROM watching_list
        GROUP BY userid , video_id
       HAVING COUNT(*) > 1) double_watchers
Where double_watchers.userid = users.id;

我正在使用您的原始查询创建内联表(不确定术语),然后将其加入USERS表。可能有一种更有效的方法,但我现在没有在我面前试验实验。