#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
Возвращает две строки типа=1 и одну строку типа=2.
ID Name Type
1 Name1 1
4 Name4 2
2 Name2 1
Комментарии:
1. Это обеспечит равное количество строк на значение, в то время как OP нуждается в них в определенной пропорции.
2. @serg попытался выполнить тот же запрос. не работает на меня
3. @Гириш, добавил скрипку. Что не так с результатом?