Выберите Случайные записи из таблицы, но для каждого региона;3 записи из каждого из 4 регионов и 18 записей из оставшихся 2 регионов - PullRequest
0 голосов
/ 09 июня 2018

Мне нужна помощь, чтобы понять, как выбрать в общей сложности 30 случайных записей из таблицы, содержащей более 10000 записей в таблице Oracle.Я искал в другом месте, но другие решения, кажется, выбирают одинаковое количество случайных записей из каждой категории.Я использую Oracle SQL Developer, если это поможет.

В моем запросе нужно выбрать 3 случайные записи из каждой из 4 областей, а также выбрать всего 18 записей из двух других областей.Общее количество случайных записей должно быть 30 и не должно содержать повторяющихся записей при каждом запуске запроса.

У нас есть 6 регионов продаж (красный, синий, зеленый, черный, оранжевый, фиолетовый), и мы хотимслучайным образом наградить 3 торговцев из красного, синего, зеленого и черного регионов;но также случайным образом награждают в общей сложности 18 продавцов из двух других регионов: оранжевого и фиолетового.

Это то, что я имею до сих пор.Я не настолько продвинут в работе с SQL, поэтому прошу вас быть добрым.

Мне не удалось понять, как выбрать 18 из комбинации оранжевого и фиолетового регионов.

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;

1 Ответ

0 голосов
/ 09 июня 2018

У вас в основном правильная идея.Вам просто нужно рассматривать Оранжевый и Фиолетовый регионы как одно целое и иметь разные условия для разных регионов:

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...