Sql server вывести определенное количество строк

Содержание
  1. Как в SQL получить первые (или последние) строки запроса? TOP или OFFSET?
  2. Получаем первые строки результата SQL запроса
  3. Исходные данные для примеров
  4. Получаем первые строки запроса с помощью TOP
  5. Получаем первые строки запроса с помощью OFFSET-FETCH
  6. Как вывести последние строки SQL запроса?
  7. Получаем последние строки SQL запроса с помощью TOP
  8. Получаем последние строки SQL запроса с помощью OFFSET-FETCH
  9. Функция SQL COUNT ()
  10. Функция COUNT ()
  11. SQL COUNT строки в таблице
  12. Выберите COUNT (*) из нескольких таблиц
  13. SQL COUNT () с именем столбца
  14. Строки SQL COUNT с определенным пользователем заголовком столбца
  15. SQL COUNT () с предложением where
  16. Применение функции COUNT ()
  17. Функция COUNT
  18. Основные запросы
  19. Условия выборки
  20. Группировка
  21. Сложение строк
  22. Несколько таблиц
  23. Длина строк
  24. Изменение строк
  25. Поиск по строкам
  26. Работа с пробелами
  27. Работа с регистром
  28. Информация
  29. Условия
  30. Полезное
  31. Разное
  32. Математические функции
  33. Списки
  34. Извлечение части даты
  35. Получение даты и времени
  36. Преобразование даты
  37. Сложение дат
  38. Тригонометрия
  39. Отдельные символы
  40. Системы счисления
  41. Синтаксис
  42. Примеры
  43. Пример
  44. Пример
  45. Пример
  46. Меняем таблицу для примеров
  47. Пример

Как в SQL получить первые (или последние) строки запроса? TOP или OFFSET?

Всем привет, сегодня мы поговорим о том, как в Microsoft SQL Server на языке T-SQL можно оставить только определенное количество первых строк результирующего набора данных. При этом мы рассмотрим два способа реализации этой простой задачи. Также я покажу Вам, как можно вывести, наоборот, только последние строки SQL запроса.

В языке T-SQL существует две стандартные возможности, которые позволяют нам применить фильтр к результирующему набору данных, иными словами, оставить в результате только определённое количество строк. Это могут быть первые строки, с учётом сортировки, что достаточно часто требуется при работе с базами данных на SQL, или последние строки, а также существует возможность вывести любой набор строк, например, пропустить первые строки и вывести определённое количество следующих строк.

Читайте также:  Как отстирать пятно мочи с дивана

Как я уже отметил, существует два способа фильтрации результирующего набора данных, первый – это использование фильтра TOP, и второй – это использование конструкции OFFSET-FETCH, которую мы подробно рассмотрели в отдельном материале — «OFFSET-FETCH в T-SQL – описание и примеры использования».

Получаем первые строки результата SQL запроса

Сейчас давайте я покажу, как можно вывести первые строки результирующего набора данных, сначала мы рассмотрим пример с использованием TOP, а затем сделаем то же самое только с помощью OFFSET-FETCH.

Но для начала давайте определимся с исходными данными, чтобы Вы понимали, какие данные у нас есть и что мы получаем в итоге.

Исходные данные для примеров

В качестве сервера у меня выступает Microsoft SQL Server 2016 Express. А теперь давайте представим, что у нас есть таблица TestTable и в ней содержатся следующие данные (перечень товаров с указанием цены).

Получаем первые строки запроса с помощью TOP

TOP – это инструкция T-SQL, с помощью которой можно ограничить число строк в результирующем наборе данных SQL запроса.

Синтаксис

TOP (Число строк) [PERCENT]

У инструкции TOP несколько параметров:

  • Число строк – сразу после ключевого слова TOP в скобочках мы указываем число, которое будет означать количество строк в итоговом результате. В инструкции SELECT допускается указание данного числа без скобочек, однако это не рекомендуется;
  • PERCENT – параметр, который говорит, что в запросе необходимо оставить не фактическое количество строк, а процент строк от общего количества, т.е. число, указанное ранее, будет означать процент, а не количество;
  • WITH TIES – параметр, который говорит, что в результирующий набор необходимо включить и записи с тем же значением, что и последняя строка, в случае наличия подобных записей. Например, если Вам нужно получить 5 самых дорогих товаров, при этом на пятом месте запись с ценой 100, а на шестом месте также цена 100, так вот, без параметра WITH TIES Вам вернётся 5 строк, а если данный параметр указать — вернется 6 строк.

Фильтр TOP обычно применяется с сортировкой данных (ORDER BY), однако это необязательно, можно применять данный фильтр и без сортировки данных, только в этом случае строки будут возвращаться в произвольном порядке (так, как они хранятся).

Пример SQL запроса с TOP – выводим первые 5 строк

Допустим, нам нужно получить 5 самых дорогих товаров, для этого пишем следующий запрос.

В данном случае мы указали сортировку по уменьшению цены (ORDER BY Price DESC), а также применили фильтр TOP (5), для ограничения вывода строк результирующего набора.

Пример SQL запроса с TOP и параметром WITH TIES

Сейчас давайте запустим два запроса, в обоих случаях мы будем запрашивать 4 самых дорогих товара, т.е. применим фильтр TOP (4), однако во втором запросе дополнительно мы укажем параметр WITH TIES и посмотрим на разницу итогового результата.

В итоге мы очень хорошо видим разницу, в первом случае вывелось 4 строки, а во втором 5, так как товар в 5 строке имеет точно такую же цену, как и товар в 4 строке.

Пример SQL запроса с TOP и параметром PERCENT

В этом примере давайте просто выведем 50 процентов итогового набора записей, т.е. половину. Для этого мы используем параметр PERCENT.

Так как у нас в таблице TestTable всего 8 записей, нам вывелось 4 строки, т.е. как раз 50 процентов.

Получаем первые строки запроса с помощью OFFSET-FETCH

Вторым способом получения первых строк является использование конструкции OFFSET-FETCH, однако она появилась только в 2012 версии SQL сервер, до этого, соответственно, этот способ использовать не получится.

У конструкции OFFSET-FETCH отсутствуют такие параметры, как PERCENT и WITH TIES, которые есть у фильтра TOP, однако у OFFSET-FETCH есть одно очень важное преимущество – это возможность пропускать определенное количество первых строк.

Примечание! OFFSET-FETCH — это часть конструкции ORDER BY, поэтому без сортировки использовать OFFSET-FETCH не удастся. Также не получится одновременно использовать OFFSET-FETCH и TOP в одном запросе SELECT.

Пример SQL запроса с OFFSET-FETCH — выводим первые 5 строк

Чтобы вывести первые строки с помощью конструкции OFFSET-FETCH, нам нужно в секции OFFSET указать 0, т.е. начинать вывод сразу с первой строки (если указать другое число, то именно такое количество строк будет пропущено). В секции FETCH мы соответственно указываем 5.

Результат, мы видим, точно такой же, как и в случае с TOP.

Как вывести последние строки SQL запроса?

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

Получаем последние строки SQL запроса с помощью TOP

В случае с TOP нам дополнительно потребуется использовать конструкцию WITH (CTE – обобщенное табличное выражение), для того чтобы выполнить сортировку по идентификатору для применения фильтра TOP, т.е. отобрать самые последние записи. А после этого мы уже можем отсортировать строки так, как нам нужно.

Как видите, нам вывелись 5 последних строк.

Получаем последние строки SQL запроса с помощью OFFSET-FETCH

Для получения последних строк с помощью OFFSET-FETCH нам потребуется предварительно узнать общее количество строк, для того чтобы определить, сколько строк нужно пропустить. Это можно сделать как с помощью вложенного запроса, так и с помощью предварительного сохранения нужного нам значения в переменной. Я покажу способ с использованием переменной.

Итоговый результат такой же, как и в запросе с TOP.

Теперь Вы знаете, как с помощью TOP и OFFSET получать первые и последние строки результирующего набора данных, который возвращает SQL запрос.

В данной статье мы затронули одну очень маленькую возможность языка T-SQL, но их, как Вы понимаете, гораздо больше, поэтому, если Вы начинающий программист и хотите изучить язык T-SQL, то рекомендую посмотреть мои видеокурсы по T-SQL, с помощью которых Вы «с нуля» научитесь работать с SQL и программировать на T-SQL.

У меня на этом все, удачи в освоении языка T-SQL!

Источник

Функция SQL COUNT ()

Функция COUNT ()

Функция SQL COUNT () возвращает количество строк в таблице, удовлетворяющих критериям, указанным в предложении WHERE. Он устанавливает количество строк или ненулевых значений столбцов.
COUNT () возвращает 0, если не было совпадающих строк.

Синтаксис:

Приведенный выше синтаксис является общим стандартным синтаксисом SQL 2003 ANSI. Это помогает понять, как используется функция SQL COUNT (). Но разные поставщики баз данных могут по-разному применять функцию COUNT ().

Ниже вы можете видеть, что MySQL, PostgreSQL и Microsoft SQL Server используют тот же синтаксис, что и приведенный выше. Но DB2 и Oracle немного отличаются.

В целом, вы можете использовать * или ALL или DISTINCT или какое-либо выражение вместе с COUNT, чтобы СЧИТАТЬ число строк по какому-либо условию или по всем строкам, в зависимости от аргументов, которые вы используете вместе с функцией COUNT ().

Поддержка СУБД: функция COUNT ()

СУБД команда
MySQL поддержанный
PostgreSQL поддержанный
SQL Server поддержанный
оракул поддержанный

Синтаксис DB2 и Oracle:

Параметры:

название Описание
ВСЕ Относится ко всем значениям. ALL возвращает количество ненулевых значений.
DISTINCT Игнорируемые повторяющиеся значения и COUNT возвращает количество уникальных ненулевых значений.
выражение Выражение состоит из одной константы, переменной, скалярной функции или имени столбца, а также может быть фрагментами запроса SQL, которые сравнивают значения с другими значениями. Выражение любого типа, кроме текста или изображения. Агрегатные функции и подзапросы не допускаются.
* СЧИТЫВАЕТ все строки в целевой таблице независимо от того, содержат ли они значения NULL.

Синтаксическая диаграмма — функция COUNT ()

На последующих страницах мы обсудили, как применять COUNT () с различными предложениями SQL. Для этих приложений мы использовали Oracle 10g Express Edition.

Важная вещь о функции COUNT ():

Когда * используется для COUNT (), все записи (строки) считаются COUNTed, если некоторое содержимое NULL, но COUNT (column_name) не считает COUNT запись, если ее поле имеет значение NULL. Смотрите следующие примеры:

SQL COUNT строки в таблице

В следующем примере используется символ звездочки (*), за которым следует SQL COUNT (), который указывает все строки таблицы, даже если есть какое-либо значение NULL.

Пример таблицы: заказы

Чтобы получить количество строк в таблице ‘orders’, можно использовать следующую инструкцию SQL:

Код SQL:

Иллюстрированная презентация:

Выберите COUNT (*) из нескольких таблиц

Следующий запрос COUNT количество строк из двух разных таблиц (здесь мы используем сотрудников и отделов) с помощью команды COUNT (*).

Код SQL:

SQL COUNT () с именем столбца

В этом примере функция SQL COUNT () исключает значения NULL для определенного столбца, если столбец указан в качестве аргумента в скобках функции COUNT.

Образец таблицы: listofitem

Чтобы получить количество строк в таблице listofitem со следующим условием:

1. COUNT количество строк для столбца «coname»

можно использовать следующий оператор SQL:

Код SQL:

Объясните:

Приведенный выше оператор СЧИТАЕТ те строки для столбца coname, которые не равны NULL.

Строки SQL COUNT с определенным пользователем заголовком столбца

Получить количество строк в таблице «заказов» при следующем условии —

1. результат должен отображаться с заголовком «Количество рядов»,

можно использовать следующий оператор SQL:

Код SQL:

SQL COUNT () с предложением where

Предложение WHERE может использоваться вместе с функцией SQL COUNT (). выбрать конкретные записи из таблицы в соответствии с заданным условием.

Пример:

Пример таблицы: заказы

Чтобы получить количество строк в таблице «заказов» при следующем условии —

1. ord_amount против заказа более 1500,

можно использовать следующий оператор SQL:

Применение функции COUNT ()

На последующих страницах мы обсудили, как применять COUNT () с различными предложениями SQL. Для этих приложений мы использовали Oracle 10g Express Edition.

Страница COUNT with DISTINCT обсуждает, как применять функцию COUNT с DISTINCT, а также обсуждает, как применять функцию COUNT с предложением ALL. В отличие от использования *, когда используется ALL, значения NULL не выбираются.

На странице COUNT HAVING рассказывается, как применить функцию COUNT с предложением HAVING, а также с HAVING и GROUP BY.

Страница COUNT с GROUP BY описывает, как применить функцию COUNT с GROUP BY в порядке возрастания и в порядке убывания.

Примечание. Выводы указанного оператора SQL, показанного здесь, взяты с использованием Oracle Database 10g Express Edition.

Вот слайд-презентация всех агрегатных функций.

Упражнения по SQL

Хотите улучшить вышеуказанную статью? Вносите свои заметки / комментарии / примеры через Disqus.

Предыдущая: Агрегатные функции
Следующая: COUNT с отличным

Источник

Функция COUNT

Основные запросы

Условия выборки

Группировка

Сложение строк

Несколько таблиц

Длина строк

Изменение строк

Поиск по строкам

Работа с пробелами

Работа с регистром

Информация

Условия

Полезное

Разное

  • Типы полей
  • Организация базы данных
    создание правильной структуры —>
  • Подзапросы
  • SELECT @min_price:=MIN(price),@max_price:=MAX(price) FROM shop; mysql> SELECT * FROM shop WHERE price=@min_price OR price=@max_price; https://habrahabr.ru/post/133781/ тут еще про переменные цикл получается SET @i = 0; SELECT * FROM product WHERE MOD(@i:=@i+1, 2) = 0; —>Переменные sql

Математические функции

Списки

Извлечение части даты

Получение даты и времени

Преобразование даты

Сложение дат

Тригонометрия

Отдельные символы

Системы счисления

Функция COUNT подсчитывает количество записей в таблице.

Условие, по которому будут выбираться записи, задается с помощью команды WHERE.

Команда WHERE не является обязательной, если ее не указать — будут подсчитаны все записи в таблице.

См. также команду DISTINCT, которая позволяет подсчитывать только уникальные значения поля.

См. также команду GROUP BY, которая позволяет группировать записи и затем с помощью COUNT подсчитывать количество в группах.

Синтаксис

Подсчет всех записей:

Подсчет всех записей, где заданное поле не равно NULL:

Только уникальные значения поля:

Примеры

Все примеры будут по этой таблице workers, если не сказано иное:

id
айди
name
имя
age
возраст
salary
зарплата
1 Дима 23 400
2 Петя 25 500
3 Вася 23 500
4 Коля 30 1000
5 Иван 27 500
6 Кирилл 28 1000

Пример

Давайте подсчитаем всех работников с возрастом 23 года:

Результат выполнения SQL запроса:

count
результат подсчета
2

Пример

Давайте подсчитаем количество разных зарплат (их будет 3 штуки: 400, 500 и 1000):

Результат выполнения SQL запроса:

count
результат подсчета
3

Пример

Давайте подсчитаем одновременно количество разных возрастов и количество разных зарплат:

Результат выполнения SQL запроса:

count1
количество возрастов
count2
количество зарплат
5 3

Меняем таблицу для примеров

Все примеры ниже будут по этой таблице workers, если не сказано иное:

id
айди
name
имя
age
возраст
salary
зарплата
1 Дима 23 NULL
2 Петя 25 500
3 Вася 23 NULL

Пример

Давайте подсчитаем количество всех записей:

Результат выполнения SQL запроса:

count
результат подсчета
3

А теперь подсчитаем количество зарплат, не равных NULL:

Источник

Оцените статью