mySQL: переменная LIMIT - PullRequest
       5

mySQL: переменная LIMIT

1 голос
/ 02 июня 2011

Я использую SQL-оператор для получения 5 лучших записей в списке:

SELECT ... FROM table ORDER BY someColumn DESC LIMIT 5

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

Name       Count
Person B   10
Person D   8
Person A   5
Person E   5
Person C   4

Если естьбольше результатов со значением, подобным пятой записи в списке (4 в примере), я бы тоже хотел их показать.Есть ли способ добиться этого с помощью одного запроса?

Итак, скажем, полные списки выглядят так:

Name       Count
Person B   10
Person D   8
Person A   5
Person E   5
Person C   4
Person H   4
Person I   4
------------
Person G   3
Person F   1
Person J   1

Как я могу изменить свой запрос, чтобы он возвращал первые семь результатов?Я, конечно, не могу использовать LIMIT 7 или WHERE Count >= 4, так как не знаю этого заранее.

Ответы [ 2 ]

5 голосов
/ 02 июня 2011

Вы хотите сказать, что хотите получить первые пять результатов, а также все остальные результаты, которые связаны на 5-м месте, верно?Одно из решений - сначала получить 5-й результат, используя подзапрос, а затем получить то, что вам нужно:

SELECT ...
FROM table
WHERE someColumn >=
    ( SELECT someColumn 
      FROM table 
      ORDER BY someColumn DESC 
      LIMIT 4, 1                      <-- only the 5th 
    )
ORDER BY someColumn DESC 
0 голосов
/ 02 июня 2011

Два решения:

Sol 1: используйте LIMIT 100 или около того, и удалите ненужные строки в вашей программе.

Sol 2: Выполните два запроса, наиболее вероятный, который будет более дорогостоящим:

SELECT * FROM (SELECT ... FROM table ORDER BY
  someColumn DESC LIMIT 5) 
  UNION (SELECT ... FROM table ORDER BY
         someColumn DESC LIMIT 50, 5);
...