Выберите FIRST X из запроса, но получите количество (например, для подкачки) - PullRequest
0 голосов
/ 19 января 2019

Я хочу вернуть первые x строк, но мне также нужно общее количество элементов в моем выборе. В MSSQL я понял это, но я не нашел такого же решения в Interbase.

Существует ли такое утверждение и для Firebird?

И один общий вопрос, является ли такая встроенная функция (также в MSSQL) на самом деле быстрее, чем выполнять второй оператор для получения общего количества строк?

Ответы [ 2 ]

0 голосов
/ 20 января 2019

Если вы используете Firebird 3, вы можете использовать оконные функции :

select count(*) over(), column1, column2, etc
from sometable
where somecondition
order by something
fetch first 10 rows only

При этом используется условие fetch , представленное в Firebird 3.

В более ранних версиях сделать это немного сложнее, но, например, в Firebird 2.1 и выше, вы можете использовать общее табличное выражение, чтобы избежать необходимости повторять запрос и условия:

with actualquery as (
  select column1, column2, etc
  from sometable
  where somecondition
)
select (select count(*) from actualquery), column1, column2, etc
from actualquery
order by something
rows 10

При этом используется rows предложение (что аналогично select first 10)

0 голосов
/ 20 января 2019

Вам нужно два отдельных запроса.

Один из них - получение ограниченных строк, установленных с использованием SQL-совместимых offset & fetch, начиная с Firebird 3 или, альтернативно, rows или first & skip:

select field1, field2
from mytable
[where conditions]
[offset 0 rows] fetch first 10 rows only

Еще один способ - получить общее количество записей:

select count(*) from mytable [where conditions]

Обратите внимание, что последний запрос может быть дорогостоящим для сложных запросов и / или больших объемов данных. Обычно на большом количестве данных используются другие подходы. Один из них посвящен двигателям FTS, таким как SphinxSearch. Google, например, даст вам приблизительное количество результатов.

...