- Как в SQL получить первые (или последние) строки запроса? TOP или OFFSET?
- Получаем первые строки результата SQL запроса
- Исходные данные для примеров
- Получаем первые строки запроса с помощью TOP
- Получаем первые строки запроса с помощью OFFSET-FETCH
- Как вывести последние строки SQL запроса?
- Получаем последние строки SQL запроса с помощью TOP
- Получаем последние строки SQL запроса с помощью OFFSET-FETCH
- Функция SQL COUNT ()
- Функция COUNT ()
- SQL COUNT строки в таблице
- Выберите COUNT (*) из нескольких таблиц
- SQL COUNT () с именем столбца
- Строки SQL COUNT с определенным пользователем заголовком столбца
- SQL COUNT () с предложением where
- Применение функции COUNT ()
- Функция COUNT
- Основные запросы
- Условия выборки
- Группировка
- Сложение строк
- Несколько таблиц
- Длина строк
- Изменение строк
- Поиск по строкам
- Работа с пробелами
- Работа с регистром
- Информация
- Условия
- Полезное
- Разное
- Математические функции
- Списки
- Извлечение части даты
- Получение даты и времени
- Преобразование даты
- Сложение дат
- Тригонометрия
- Отдельные символы
- Системы счисления
- Синтаксис
- Примеры
- Пример
- Пример
- Пример
- Меняем таблицу для примеров
- Пример
Как в 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:
Источник