MYSQL показывает смешанные данные из столбца с разбиением на страницы

#mysql #sql

Вопрос:

У меня есть таблица MySQL со следующими таблицами

ID Имя Тип
1 Имя 1 1
2 Имя 2 1
3 Имя 3 1
4 Имя 4 2
5 Имя 5 1
6 Имя 6 1
7 Имя 7 2

Поэтому я хочу получить 3 результата за один раз, как это

 Select * from table limit 0,3
 

Но мне нужны результаты смешивания из третьей колонки. Поэтому, когда это возможно, все 3 записи должны содержать 2 результата из типа=1 и 1 результат из типа=2

Это будет динамично, что означает, что может быть добавлено больше типов, и может ОГРАНИЧИТЬСЯ 10 данными (2,3,2,1,2).

Комментарии:

1. Привет @Гириш, пожалуйста, предоставьте ожидаемый результат.

2. Идентификатор (1,2,4) должен быть возвращен на первой странице, а на следующей странице будут показаны аналогичные смешанные результаты

3. ОГРАНИЧЕНИЕ без ЗАКАЗА ПО не имеет смысла. Но мне нужны результаты смешивания из третьей колонки. Поэтому, когда это возможно, все 3 записи должны содержать 2 результата из type=1 и 1 результат из type=2 , Постройте в соответствии с выражением упорядочения, которое обеспечит такую сортировку.

Ответ №1:

Пронумеруйте элементы каждого типа отдельно

 select ID, Name, Type
from (
   select *, row_number() over(partition by Type order by Name) rn
   from mytable
) t
order by rn, id
limit 0,3 
 

db<>скрипка

Возвращает две строки типа=1 и одну строку типа=2.

 ID  Name    Type
1   Name1   1
4   Name4   2
2   Name2   1
 

Комментарии:

1. Это обеспечит равное количество строк на значение, в то время как OP нуждается в них в определенной пропорции.

2. @serg попытался выполнить тот же запрос. не работает на меня

3. @Гириш, добавил скрипку. Что не так с результатом?