首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从表中为每个区域选择随机记录;从4个区域中的每个区域中选择3条记录,从其余2个区域中选择18条记录

从表中为每个区域选择随机记录;从4个区域中的每个区域中选择3条记录,从其余2个区域中选择18条记录
EN

Stack Overflow用户
提问于 2018-06-10 00:27:24
回答 1查看 58关注 0票数 1

我需要一些帮助来弄清楚如何从Oracle表中超过10000+记录的表中选择总共30个随机记录。我已经在其他地方寻找过,但其他解决方案似乎都是从每个类别中选择相同数量的随机记录。如果有帮助,我正在使用Oracle SQL Developer。

我的查询需要从4个区域中的每个区域中随机选择3条记录,但还需要从其他2个区域中选择总共18条记录。随机记录的总数应该是30,并且不应该在每次查询时都包含重复的记录。

我们有6个销售区域(红色、蓝色、绿色、黑色、橙色、紫色),我们希望随机奖励红色、蓝色、绿色和黑色区域中的3名销售人员;但也随机奖励其他两个区域橙色和紫色中的总共18名销售人员。

这就是我到目前为止所拥有的。我对SQL不是很在行,所以我请你对我好一点。

我想不出如何从橙色和紫色区域的组合中选择18个区域。

代码语言:javascript
复制
select * from
       ( select salesman_id,sales_region,supervisor, row_number()
                over (partition by sales_region order by dbms_random.value) as num_row
         from   sales_table
         group by salesman_id,sales_region,supervisor )
where num_row <=3;
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-10 01:36:41

基本上你的想法是对的。您只需将橙色区域和紫色区域视为一个区域,并针对不同的区域使用不同的条件:

代码语言:javascript
复制
SELECT * 
FROM   (SELECT salesman_id, 
                CASE
                     WHEN sales_region IN ('Oranage', 'Purple') THEN 'Special'
                     ELSE sales_region
               END AS sales_region, 
               supervisor, 
               ROW_NUMBER() OVER (PARTITION BY CASE
                                               WHEN sales_region IN ('Oranage', 'Purple')
                                                    THEN 'Special'
                                               ELSE sales_region
                                               END
                           ORDER BY dbms_random.value) AS num_row
         FROM  sales_table) t
WHERE (sales_region = 'Special' AND num_row <= 18) OR (num_row <= 3)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50776315

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档