Stack Overflow на русском Asked on December 14, 2021
Нужно сделать следующую выборку-сортировку в MySQL:
Нужно выбрать 10 товаров дороже 100 руб., 10 товаров от 50 до 100 руб., 10 товаров от 30 до 50, 10 товаров от 20 до 30, 10 товаров 10 до 20 и отсортировать их рандомно и выбрать как первые 50 товаров. Далее опять выводим по той же формуле следующие 50 товаров и т.д.
Совсем на вскидку с символическими именами, с возможными синтаксическими и логическими ошибками, ввиду того что вы не дали тестовых данных на которых запрос можно было бы отлаживать.
select *
from (
select t.*, x.num, ceil((row_number() over(partition by x.num))/10 order by rand()) grp10
from Tab t
join (select 100 f, 1000000 t, 1 num union select 50, 100, 2 union select 30, 50, 3 ...) x
where t.цена >= x.f and t.цена < x.t
) y
order by grp10, num
Основная идея - получаем номера диапазонов цен (num). Назначаем каждой записи номер группы, как целую часть от деления порядкового номера внутри диапазона цен в случайной сортировке на 10. Выводим в порядке номеров групп и номеров ценовых диапазонов. Получаем по 10 записей каждого типа, в порядке расположения типов. Группы по 50 получаются автоматически при достаточном количестве записей. Или попробовать сделать итоговый order by grp10, rand()
что бы перемешать записи рандомно целиком внутри групп по 50 шт.
Answered by Mike on December 14, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP