ShelestovAnt
@ShelestovAnt
Верстаю и программирую

Возможно ли так использовать limit?

Всем привет!

Есть таблица
1 - Название 1 - type_1
2 - Название 2 - type_2
3 - Название 3 - type_3
4 - Название 4 - type_3
5 - Название 5 - type_3
6 - Название 6 - type_2
7 - Название 7 - type_2

Задача:
Получить таблицу в которой будет максимум по 2 строки каждого type_*
Т.е. нужен вот такой результат:
1 - Название 1 - type_1
2 - Название 2 - type_2
3 - Название 3 - type_3
4 - Название 4 - type_3
6 - Название 6 - type_2

Mysql умеет так делать?
  • Вопрос задан
  • 60 просмотров
Решения вопроса 1
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
Если Вы пользуетесь MySQL 8.0 и выше Вы можете воспользоваться window function row_number() следующим образом:
SELECT title, type
FROM (
  SELECT 
	title, 
	type,
	row_number() over (partition by type order by id) rnum
  FROM test) numered
WHERE numered.rnum < 3
;


Проверить SQL запрос
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@BorisKorobkov Куратор тега MySQL
Web developer
Если "максимум по 1 строке", то можно легко сделать с помощью "GROUP BY".

Если "максимум по 2 строки", то уже нужны счетчики, подзапросы или join на себя, всё это гораздо сложнее и делать, и выполнять. Гораздо проще выбирать всё, а дальше на PHP с помощью массива считать количество каждого типа и при необходимости continue
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы