Допустим, в my_table миллионы записей.
Вот мой запрос на извлечение строк с определенным именем из списка:
SELECT * FROM my_table WHERE Name IN ('name1','name2','name3','name4')
Как ограничить возвращаемый результат по имени1, имени2 и т. Д.? Следующий запрос ограничит весь результат (до 100).
SELECT * FROM my_table WHERE Name IN ('name1','name2','name3','name4') LIMIT 100
Мне нужно ограничить до 100 для каждого имени.
2 ответа
В MySQL это немного неудобно, но, вероятно, лучший метод - это переменные:
select t.*
from (select t.*,
(@rn := if(@n = name, @rn + 1,
if(@n := name, 1, 1)
)
) as rn
from my_table t cross join
(select @n := '', @rn := 0) params
order by name
) t
where rn <= 100;
Если вы хотите ограничить это подмножеством имен, добавьте в подзапрос предложение where
.
Примечание. Если вы хотите выбрать определенные строки - например, самую старую или самую новую, самую большую или самую высокую - просто добавьте второй ключ к order by
в подзапросе.
RANK
, пока не заметил тег MySQL и мне не стало грустно. Протестировал ваш запрос в sqlfiddle, и, похоже, он работает. Хорошее решение. sqlfiddle.com/#!9/6ee5aa/1
Попробуйте SELECT * FROM my_table WHERE Name IN ('name1', 'name2', 'name3', 'name4') ПОЛУЧИТЬ ТОЛЬКО ПЕРВЫЕ 100 СТРОК
fetch
не является допустимым ключевым словом MySQL.
Похожие вопросы
Новые вопросы
mysql
MySQL - это бесплатная система управления реляционными базами данных с открытым исходным кодом (RDBMS), использующая язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. Д. Это разные БД, которые все используют свои собственные диалекты SQL для управления данными.
RANK()
, который MySQL, к сожалению, не поддерживает. Ответ Гордона Линоффа, похоже, имитирует функциональность ранжирования.