TransWikia.com

Сортировка в MySQL по диапазону цен по группам

Stack Overflow на русском Asked on December 14, 2021

Нужно сделать следующую выборку-сортировку в MySQL:
Нужно выбрать 10 товаров дороже 100 руб., 10 товаров от 50 до 100 руб., 10 товаров от 30 до 50, 10 товаров от 20 до 30, 10 товаров 10 до 20 и отсортировать их рандомно и выбрать как первые 50 товаров. Далее опять выводим по той же формуле следующие 50 товаров и т.д.

One Answer

Совсем на вскидку с символическими именами, с возможными синтаксическими и логическими ошибками, ввиду того что вы не дали тестовых данных на которых запрос можно было бы отлаживать.

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

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP