区分用户信息并受记录计数查询限制

时间:2011-12-12 07:42:59

标签: sql oracle exists

我有两个表:User_IdShopping表:

Shopping Table (10000 records)
----------------------------
User_Id | Purchased_Items_Id
1       | 1
1       | 2
2       | 4
2       | 6
....

User_Id Table (7000 records)
-------------
User_Id
1
2
3
....

My_Desired table
 User_Id | Purchased_Items_Id
    1       | 1
    2       | 4
    2       | 6
   .....
  

My_Desired表必须包含7000个不同的用户及其记录   数应该是8000。

购物表是主要表格。 My_Desired表必须包含7000个不同的用户,并且其记录总数应为8000.从Shopping表中选择8000随机记录,它将至少包含所有不同的User_Id一次。

INSERT INTO MY_SHOP
( SELECT S.* FROM Shopping S WHERE User_Id IN (SELECT * FROM  User_Id) AND  ROWNUM<=8000);

此代码返回8000条记录,但不同的User_Id计数小于7000条。

我该如何解决?

事实上,没有其他购物信息

3 个答案:

答案 0 :(得分:1)

你的愿望不明确。我想你想要8000个随机用户,以及购物中的一些信息...

select user_id, 
       first_value(Purchased_Items_Id) over (partition by user_id) some_info --some shopping info
       wm_concat (Purchased_Items_Id) all_info -- all info
from 
   (select user_id, rownum rn
    from User_id
    ORDER BY dbms_random.value
    )
    join Shopping using(user_id)
where rn <= 8000

你想在第二栏中做什么?什么购物信息?

答案 1 :(得分:1)

此查询将返回随机8000购物信息,但将包含所有7000个用户。

select * FROM(

    SELECT user_id,  
         Purchased_Items_Id,
         row_number() over (partition by user_id order by dbms_random.value) as rnk
    FROM 
          USER_ID join Shopping using(user_id) 
    ORDER BY rnk

)

where rownum <= 8000

答案 2 :(得分:0)

我认为你已经使用了DISTINCT关键字:

INSERT INTO MY_SHOP
(SELECT S.Purchased_Items_Id, DISTINCT(S.User_Id) FROM Shopping S WHERE User_Id IN (SELECT * FROM User_Id) AND ROWNUM<=8000);

但我认为,在这种情况下,子选择是没有必要的,因为这个SELECT中没有限制。