MySql Запрос на поиск первых 50% записей из таблицы - PullRequest
0 голосов
/ 09 мая 2020

Я пытаюсь получить первые 50% записей от пользователя таблицы MySQL. Я знаю, что мы можем использовать limit или top для их поиска, но общее количество записей не фиксировано, поэтому жесткое кодирование фактического числа в limit или top не дает мне первых 50% записей. Как мне этого добиться?

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Если вы используете MySQL 8.0, вы можете использовать для этого оконные функции: ntile() делает именно то, что вы просите. Предполагая, что ваш столбец упорядочивания - id:

select *
from (select t.*, ntile(2) over(order by id) nt from mytable) t
where nt = 1

В более ранних версиях одним из вариантов является пользовательская переменная и соединение с агрегированным запросом:

select *
from (
    select t.*, @rn := @rn + 1 rn
    fom (select * from mytable order by id) t
    cross join (select @rn := 0) x
    cross join (select count(*) cnt from mytable) c
) t
where rn <= cnt / 2
1 голос
/ 09 мая 2020

Mysql напрямую не поддерживает это. Вы можете попробовать с двумя запросами или использовать подзапросы

Что-то вроде этого.

  1. найти общее количество записей / 2
  2. это значение должно быть применяется в предложении limit.

    SET @count = (SELECT COUNT (*) / 2 FROM table);

    SET @ sql = CONCAT ('SELECT * FROM table LIMIT', @count);

...