不同用户信息和受限记录数查询

Posted

技术标签:

【中文标题】不同用户信息和受限记录数查询【英文标题】:Distinct Users Information and Limited by records count query 【发布时间】:2011-12-12 07:42:58 【问题描述】:

我有两个表: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。

我该如何解决?

其实没有其他购物信息

【问题讨论】:

哦,我现在明白了。我会发布一个答案。 【参考方案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

【讨论】:

"此查询将返回随机的 8000 个购物信息,但将包含所有 7000 个用户。"正是我想这样做!我现在就试试【参考方案2】:

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

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

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

【讨论】:

【参考方案3】:

我认为,您使用了 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 没有限制。

【讨论】:

以上是关于不同用户信息和受限记录数查询的主要内容,如果未能解决你的问题,请参考以下文章

Django查询数据库性能优化

如何解决爬虫的IP地址受限问题

由于DBA限制导致ONU下行带宽受限

laravel 根据字段不同值做不同查询

如何将受限用户令牌转换为非受限用户令牌?

记一次查询性能优化,原30s+,现0.5s~20s