1

我正在与 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 个项目和 <=10 条记录?

样本数据:

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
4

1 回答 1

0

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

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演示。

于 2013-09-03T16:32:49.997 回答