如何为所有 3 个项目都存在于选择中的 3 个项目选择 10 个随机记录

Posted

技术标签:

【中文标题】如何为所有 3 个项目都存在于选择中的 3 个项目选择 10 个随机记录【英文标题】:how to select 10 random records for 3 items that all 3 items exist in the selection 【发布时间】:2013-08-29 14:46:39 【问题描述】:

我正在与 Oracle 合作,但遇到了我不知道如何解决的问题。 我有很多商店,每家都卖 3 件商品。 我需要为每家商店的这 3 个项目中的每一个选择随机记录, 但每家商店的记录数量不得超过10条 并且每家商店必须至少出售每件商品。

我现在的选择为每个商店选择 10 条记录 但它选择了一项(通常是最后一项)

select *
FROM
(select store_id,item_id, product_name
row_number() over(partition by store_id order by item_id) as MyCount
from table5 order by dbms_random.value)
where MyCount<=10

如何让它为每个商店选择所有 3 个项目和

样本数据:

Id Store_ID Item_ID  Product_ID 
------------------------------
1  11723    13048841 2 
2  11723    13332688 2 
3  11723    08981562 4 
4  11723    08872923 4 
5  11723    01030632 5 
6  11723    01029557 5 
7  11723    01010174 5 
8  11723    01031526 5 
9  11723    01032479 5 
10 11723    01000285 5

【问题讨论】:

我认为您应该将order by dbms_random.value 放入您的分区中,而不是 item_id。你能展示一些示例数据吗? 谢谢!它有点帮助。我现在在结果中有 2 个项目,而不是 1 个。它仍然没有选择所有 3 个。 其实你说的很对!那家店只卖2件。另一个选择具有所有 3 个值。非常感谢! 不幸的是,该代码不一定会选择所有 3 个项目,有时只会选择 2 个。我如何确保选择所有 3 个项目? 你能展示一些示例数据吗?或创建sqlfiddle 【参考方案1】:

可能不是真正随机的,但这可以确保所有三个项目都出现在结果中。够好吗?

SELECT id,
       store_id,
       item_id,
       product_id
  FROM (SELECT id,
               store_id,
               item_id,
               product_id,
               ROW_NUMBER ()
                  OVER (PARTITION BY store_id ORDER BY r1, DBMS_RANDOM.VALUE)
                  r2
          FROM (SELECT id,
                       store_id,
                       item_id,
                       product_id,
                       ROW_NUMBER ()
                       OVER (PARTITION BY store_id, product_id
                             ORDER BY DBMS_RANDOM.VALUE)
                          r1
                  FROM mytab))
 WHERE r2 <= 10;

sqlfiddle 上的演示。

【讨论】:

太完美了!非常感谢!

以上是关于如何为所有 3 个项目都存在于选择中的 3 个项目选择 10 个随机记录的主要内容,如果未能解决你的问题,请参考以下文章

如何为所有 scss 文件定义 sass 变量

如何为 IntelliJ IDEA 中的所有项目设置默认项目位置?

如何为Laravel中的每个会话设置不同的到期时间?

如何为 Laravel 发布和自定义 .htaccess?

如何为开源项目做贡献?

如何为熊猫中的多个变量按列创建所有组合?