#sql #sql-server
#sql #sql-сервер
Вопрос:
Я пишу веб-страницу для интерактивной фильтрации результатов на основе критериев фильтрации, указанных пользователем. Я хочу вернуть из SQL только 20 ПЕРВЫХ строк, но я хочу знать, сколько строк соответствует критериям (количество). Я хочу иметь возможность сообщить пользователю: «Вот 20 лучших строк, соответствующих вашим критериям, и, кстати, было 2000 дополнительных строк, которые я здесь не показываю».
Я знаю, что мог бы просто запустить запрос дважды, но EWWWW это дорого и расточительно. Как я могу добиться того, чего хочу, не перегружая базу данных?
Ответ №1:
Вы можете использовать COUNT(*) OVER()
SELECT TOP 20 *,
COUNT(*) OVER() AS TotalMatchingRows
FROM master..spt_values
WHERE type='P'
ORDER BY number
Однако выполнение двух запросов может оказаться более эффективным, особенно если у вас более узкие индексы, которые можно использовать для определения количества совпадающих строк, но не охватывают весь SELECT
список.
Комментарии:
1. Я идиот, ты мастер дзен. 🙂 Я люблю экспертов по SQL, никаких излишеств, только факты. Спасибо, Мартин.
Ответ №2:
выберите COUNT(*) из Process_Master, где dt_time=(выберите top 1 (dt_time) из Process_Master order по DT_TIME desc)