Пример count sql: Функция SQL COUNT: примеры, синтаксис
Содержание
Функция COUNT — подсчет количества записей
Функция COUNT подсчитывает количество записей в таблице.
Условие, по которому будут выбираться записи,
задается с помощью команды WHERE.
Команда WHERE не является обязательной, если ее не указать —
будут подсчитаны все записи в таблице.
См. также команду DISTINCT,
которая позволяет подсчитывать только уникальные значения поля.
См. также команду GROUP BY,
которая позволяет группировать записи и затем с помощью COUNT
подсчитывать количество в группах.
Синтаксис
Подсчет всех записей:
SELECT COUNT(*) FROM имя_таблицы WHERE условие
Подсчет всех записей, где заданное поле не равно NULL:
SELECT COUNT(поле) FROM имя_таблицы WHERE условие
Только уникальные значения поля:
SELECT COUNT(DISTINCT поле) FROM имя_таблицы WHERE условие
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди | name имя | age возраст | salary зарплата |
---|---|---|---|
1 | Дима | 23 | 400 |
2 | Петя | 25 | 500 |
3 | Вася | 23 | 500 |
4 | Коля | 30 | 1000 |
5 | Иван | 27 | 500 |
6 | Кирилл | 28 | 1000 |
Пример
Давайте подсчитаем всех работников с возрастом 23 года:
SELECT COUNT(*) as count FROM workers WHERE age=23
Результат выполнения SQL запроса:
count результат подсчета |
---|
2 |
Пример
Давайте подсчитаем количество разных зарплат
(их будет 3 штуки: 400, 500 и 1000):
SELECT COUNT(DISTINCT salary) as count FROM workers
Результат выполнения SQL запроса:
count результат подсчета |
---|
3 |
Пример
Давайте подсчитаем одновременно количество разных возрастов
и количество разных зарплат:
SELECT COUNT(DISTINCT age) as count1, COUNT(DISTINCT salary) as count2 FROM workers
Результат выполнения SQL запроса:
count1 количество возрастов | count2 количество зарплат |
---|---|
5 | 3 |
Меняем таблицу для примеров
Все примеры ниже будут по этой таблице workers, если не сказано иное:
id айди | name имя | age возраст | salary зарплата |
---|---|---|---|
1 | Дима | 23 | NULL |
2 | Петя | 25 | 500 |
3 | Вася | 23 | NULL |
Пример
Давайте подсчитаем количество всех записей:
SELECT COUNT(*) as count FROM workers
Результат выполнения SQL запроса:
count результат подсчета |
---|
3 |
А теперь подсчитаем количество зарплат, не равных NULL:
SELECT COUNT(salary) as count FROM workers
Результат выполнения SQL запроса:
count результат подсчета |
---|
1 |
← Предыдущая страница
Следующая страница →
Команда GROUP BY — группировка при выборке из базы данных
Команда GROUP BY позволяет группировать результаты при выборке
из базы данных.
К сгруппированным результатам можно применять любые функции
(смотрите примеры).
См. также команду HAVING,
которая позволяет накладывать условие на группы, созданные с помощью GROUP BY.
Синтаксис
SELECT * FROM имя_таблицы WHERE условие GROUP BY поле_для_группировки
Примеры
Все примеры будут по этой таблице workers, если не сказано иное:
id айди | name имя | age возраст | salary зарплата |
---|---|---|---|
1 | Дима | 23 | 100 |
2 | Петя | 23 | 200 |
3 | Вася | 23 | 300 |
4 | Коля | 24 | 1000 |
5 | Иван | 24 | 2000 |
6 | Кирилл | 25 | 1000 |
Пример
В данном примере записи группируются по возрасту (будет 3 группы — 23 года, 24 года и 25 лет).
Затем для каждой группы применяется функция SUM,
которая суммирует зарплаты внутри данной группы.
В результате для каждой из групп (23 года, 24 года и 25 лет) будет подсчитана суммарная
зарплата внутри этой группы:
SELECT age, SUM(salary) as sum FROM workers GROUP BY age
SQL запрос выберет следующие строки:
age возраст | sum сумма |
---|---|
23 | 600 |
24 | 3000 |
25 | 1000 |
Пример
В данном примере мы используем дополнительное условие WHERE,
чтобы взять не все записи из таблицы:
SELECT age, SUM(salary) as sum FROM workers WHERE id>=2 GROUP BY age
SQL запрос выберет следующие строки:
age возраст | sum сумма |
---|---|
23 | 500 |
24 | 3000 |
25 | 1000 |
Пример
В данном примере записи группируются по возрасту (будет 3 группы — 23 года, 24 года и 25 лет).
Затем для каждой группы применяется функция MAX,
которая находит максимальную зарплату внутри данной группы:
SELECT age, MAX(salary) as max FROM workers GROUP BY age
SQL запрос выберет следующие строки:
age возраст | max максимальная зарплата |
---|---|
23 | 300 |
24 | 2000 |
25 | 1000 |
Пример
А теперь с помощью функции MIN
найдется минимальная зарплата внутри данной группы:
SELECT age, MIN(salary) as min FROM workers GROUP BY age
SQL запрос выберет следующие строки:
age возраст | min минимальная зарплата |
---|---|
23 | 100 |
24 | 1000 |
25 | 1000 |
Пример
А теперь с помощью функции COUNT
найдется количество записей в группе:
SELECT age, COUNT(*) as count FROM workers GROUP BY age
SQL запрос выберет следующие строки:
age возраст | count количество |
---|---|
23 | 3 |
24 | 2 |
25 | 1 |
← Предыдущая страница
Следующая страница →
Функции SQL COUNT(), AVG() и SUM()
❮ Предыдущий
Далее ❯
Функции SQL COUNT(), AVG() и SUM()
Функция COUNT()
возвращает количество строк, соответствующих заданному критерию.
COUNT() Синтаксис
SELECT COUNT( имя_столбца )
FROM имя_таблицы
ГДЕ условие ;
Функция AVG()
возвращает среднее значение числового столбца.
AVG() Синтаксис
SELECT AVG( имя_столбца )
FROM имя_таблицы
ГДЕ условие ;
Функция SUM()
возвращает общую сумму числового столбца.
SUM() Синтаксис
SELECT SUM( имя_столбца )
FROM имя_таблицы
ГДЕ условие ;
Демонстрационная база данных
Ниже приведен выбор из таблицы «Продукты» в образце базы данных «Борей»:
ID продукта | Название продукта | идентификатор поставщика | ID категории | Блок | Цена |
---|---|---|---|---|---|
1 | Шезлонги | 1 | 1 | 10 коробок по 20 пакетов | 18 |
2 | Чанг | 1 | 1 | Бутылки на 24–12 унций | 19 |
3 | Анисовый сироп | 1 | 2 | 12 флаконов по 550 мл | 10 |
4 | Каджунская приправа от шеф-повара Антона | 2 | 2 | 48 банок на 6 унций | 22 |
5 | Гамбо-микс от шеф-повара Антона | 2 | 2 | 36 коробок | 21,35 |
COUNT() Пример
Следующий оператор SQL находит количество продуктов:
Пример
SELECT COUNT(ProductID)
FROM Products;
Попробуйте сами »
Примечание. Значения NULL не учитываются.
AVG() Пример
Следующая инструкция SQL находит среднюю цену всех продуктов:
Пример
SELECT AVG(Price)
FROM Products;
Попробуйте сами »
Примечание. Значения NULL игнорируются.
Демонстрационная база данных
Ниже приведена выборка из таблицы OrderDetails в Northwind
образец базы данных:
OrderDetailID | ID заказа | ID продукта | Количество |
---|---|---|---|
1 | 10248 | 11 | 12 |
2 | 10248 | 42 | 10 |
3 | 10248 | 72 | 5 |
4 | 10249 | 14 | 9 |
5 | 10249 | 51 | 40 |
SUM() Пример
Следующая инструкция SQL находит сумму полей «Количество».
в таблице «Сведения о заказе»:
Пример
ВЫБЕРИТЕ СУММУ (количество)
ИЗ Детали заказа;
Попробуйте сами »
Примечание. Значения NULL игнорируются.
Проверьте себя с помощью упражнений
Упражнение:
Используйте правильную функцию, чтобы вернуть количество записей, для которых значение Цена
равно 18.
ВЫБРАТЬ (*) ИЗ продуктов Цена = 18;
Начать упражнение
❮ Предыдущий
Далее ❯
NEW
Мы только что запустили
видео W3Schools
Узнать
ПАЛЕТКА ЦВЕТОВ
КОД ИГРЫ
Играть в игру
Лучшие учебники
Учебник по HTML
Учебник по CSS
Учебник по JavaScript
Учебник How To
Учебник по SQL
Учебник по Python
Учебник по W3.CSS
Учебник по Bootstrap
Учебник по PHP
Учебник по Java
Учебник по C++
Учебник по jQuery
Top 9092
9002 Справочник
Справочник по HTML
Справочник по CSS
Справочник по JavaScript
Справочник по SQL
Справочник по Python
Справочник по W3. CSS
Справочник по Bootstrap
Справочник по PHP
Цвета HTML
Справочник по Java
Справочник по Angular
Справочник по jQuery
Основные примеры
Примеры HTML
Примеры CSS
Примеры JavaScript
Примеры инструкций
Примеры SQL
Примеры Python
Примеры W3.CSS
Примеры Bootstrap
Примеры PHP
Примеры Java
Примеры XML
Примеры jQuery
ФОРУМ |
О
W3Schools оптимизирован для обучения и обучения. Примеры могут быть упрощены для улучшения чтения и обучения.
Учебники, ссылки и примеры постоянно пересматриваются, чтобы избежать ошибок, но мы не можем гарантировать полную правильность всего содержания.
Используя W3Schools, вы соглашаетесь прочитать и принять наши условия использования,
куки-файлы и политика конфиденциальности.
Copyright 1999-2022 Refsnes Data. Все права защищены.
W3Schools работает на основе W3.CSS.
Функция SQL COUNT с примерами
Функция SQL COUNT является одной из наиболее распространенных функций, используемых разработчиками SQL. Я использую его ежедневно. Узнайте больше о функции COUNT в этой статье.
Назначение функции SQL COUNT
Агрегированная функция COUNT возвращает количество ненулевых выражений, оцененных в некотором наборе результатов0003
COUNT (выражение [ * | [DISTINCT | ALL]) [ over (analytic_clause) ]
Теперь в этой функции много квадратных скобок и условий. По сути, вы можете вызвать его несколькими способами:
COUNT(*) COUNT(РАЗЛИЧНОЕ выражение) COUNT(ВСЕ выражения) COUNT(*) OVER (analytic_clause) COUNT(DISTINCT выражение) OVER (analytic_clause) COUNT(ALL expression) OVER (analytic_clause)
Существует аналитическая версия этой функции, которая представляет собой более продвинутую концепцию, которую мы рассмотрим в следующей статье. Сейчас мы просто рассмотрим функцию агрегирования COUNT.
Параметры
Параметры функции SQL COUNT:
- выражение (необязательно): Это выражение используется для определения количества записей.
- analytic_clause (необязательно): используется для указания критериев аналитического запроса.
Несколько замечаний об этой функции:
- COUNT(*) — наиболее распространенный способ использования этой функции.
- Поскольку COUNT является агрегатной функцией, любые непостоянные столбцы в предложении SELECT, которые не являются агрегированными, должны быть в предложении GROUP BY. Дополнительную информацию см. в разделе примеров ниже.
- Если указать выражение, COUNT возвращает количество строк, в которых выражение не равно null. Вы можете подсчитать все строки (используя ALL) или отдельные значения выражения (используя DISTINCT).
- Если указать символ звездочки (*), функция COUNT возвращает количество всех строк, соответствующих предикату, включая дубликаты и пустые значения, или количество строк в заданной группе строк, как указано в предложении group by.
Таким образом, COUNT может возвращать несколько разных значений (в порядке от большего к меньшему):
- COUNT(*) — все строки, включая дубликаты и пустые значения.
- COUNT(выражение) – все строки, кроме нуля.
- COUNT(DISTINCT expression) – все строки, кроме дубликатов и пустых значений.
Тот факт, что COUNT(expr) исключает значения NULL, означает, что вы должны быть осторожны при выборе столбца или выражения, которые вы используете в этой функции. Различные выражения могут возвращать разные результаты.
Подсчет отдельных строк SQL: как подсчитать отдельные строки?
Чтобы подсчитать отдельные строки, сначала нужно выяснить, что в них различается. Это идентификатор? Имя? Что-то другое?
Затем вы используете функцию COUNT с ключевым словом DISTINCT внутри функции .
Он должен быть внутри функции, а не снаружи.
Таким образом, должно быть:
SELECT COUNT(DISTINCT expression)
А не:
SELECT DISTINCT COUNT(expression)
Пример SQL COUNT DISTINCT
Например, скажем, у вас есть таблица продукта. столбец с именем product_name. В этой таблице 100 записей, и некоторые названия продуктов совпадают с другими.
Простой COUNT покажет 100 записей:
SELECT COUNT(product_name) FROM product;
COUNT(product_name) |
100 |
Если вы используете DISTINCT, а затем COUNT, вы получите одну строку:
SELECT DISTINCT COUNT(product_name) FROM product;
COUNT(название_продукта) |
100 |
Это связано с тем, что сначала выполняется COUNT, который находит значение 100. Затем DISTINCT выполняется для всех различных значений COUNT. Есть только один (значение 100), поэтому показан только он.
Чтобы получить количество различных значений в SQL, поместите DISTINCT внутрь функции COUNT.
SELECT COUNT(DISTINCT product_name) FROM product;
COUNT(DISTINCTproduct_name) |
85 |
Показывает количество различных наименований продуктов. В этом примере мы видим, что их 85, и это число, которое мы ищем.
Нужно ли использовать GROUP BY с COUNT?
Да, вы делаете, но только если вы выбираете неагрегированные выражения из источника запроса.
Например, для этого запроса потребуется СГРУППИРОВАТЬ ПО:
ВЫБРАТЬ пол, количество (*) ОТ студента;
Но этот запрос не будет:
SELECT COUNT(gender) FROM student;
COUNT(1) быстрее, чем COUNT(*)?
Это распространенный вопрос, в который я действительно верил, когда начинал работать с SQL (кто-то сказал мне, что это правда).
Короткий ответ: нет, не быстрее. COUNT(1) и COUNT(*) точно такие же .
В Oracle Том Кайт (из AskTom) неоднократно подтверждал, что они одинаковы, как упоминалось в этом посте здесь.
В итоге:
- COUNT(*) — это правильный способ записи.
- COUNT(1) оптимизирован для использования внутри COUNT(*) (в Oracle).
Поэтому вам никогда не следует использовать COUNT(1).
Как отображать только те записи, которые соответствуют критериям функции COUNT?
Итак, у вас есть запрос, который возвращает значение COUNT.
Как отфильтровать набор результатов, чтобы отображались только те значения, которые соответствуют определенным критериям COUNT?
ВЫБРАТЬ fee_paid, COUNT(*) ОТ студента СГРУППИРОВАТЬ ПО fee_paid;
Результат:
FEES_PAID | СЧЕТ(*) |
100 | 1 |
500 | 1 |
350 | 1 |
200 | 1 |
900 | 1 |
50 | 1 |
0 | 1 |
150 | 2 |
800 | 1 |
Предположим, вы хотите просмотреть записи, в которых два или более учащихся заплатили одинаковое количество взносов.
Вы можете попробовать предложение WHERE.
ВЫБРАТЬ fee_paid, COUNT(*) ОТ студента ГДЕ СЧИТАТЬ (*) > 1 СГРУППИРОВАТЬ ПО fee_paid;
Имеет смысл, верно?
Если вы запустите этот запрос в Oracle:
ORA-00934: групповая функция здесь не разрешена
Эта ошибка ожидается. Вы получите аналогичные ошибки в SQL Server, MySQL и PostgreSQL. Это происходит из-за предложения WHERE.
Предложение WHERE фактически выполняется перед функцией COUNT. Это важно, потому что вы не можете ссылаться на функцию COUNT в предложении WHERE, поскольку предложение WHERE определяет количество.
Как добиться желаемого результата?
Вы используете предложение HAVING.
Предложение HAVING аналогично предложению WHERE, за исключением того, что оно выполняется после получения результатов. Вы можете использовать это в функции COUNT.
ВЫБРАТЬ fee_paid, COUNT(*) ОТ студента СГРУППИРОВАТЬ ПО fee_paid СЧЕТ(*) > 1;
Результат:
FEES_PAID | СЧЕТ(*) |
150 | 2 |
Это показывает, что есть два студента, которые заплатили 150 за обучение.
Примеры функции SQL COUNT
Вот несколько примеров функции SQL COUNT. Я считаю, что примеры — лучший способ узнать о коде, даже с объяснением выше.
Давайте сначала взглянем на наш образец таблицы.
ВЫБЕРИТЕ * ОТ учащегося;
STUDENT_ID | ИМЯ | ФАМИЛИЯ | ВЗНОС_ОПЛАЧЕН | ПОЛ |
1 | Джон | Смит | 200 | М |
2 | Сьюзен | Джонсон | 500 | Ф |
3 | Том | Крышка | 350 | М |
4 | Марка | Холлоуэй | 100 | М |
5 | Стивен | Уэббер | 0 | М |
6 | Джули | Армстронг | 150 | Ф |
7 | Мишель | Рэндалл | 150 | Ф |
8 | Андрей | Купер | 800 | М |
9 | Роберт | Пикеринг | 900 | М |
10 | Таня | Зал | 50 | Ф |
Пример 1
В этом примере используется базовая функция COUNT(*).
ВЫБЕРИТЕ СЧЕТ(*) ОТ студента;
Результат:
COUNT(*) |
10 |
Результат равен 10, поскольку в таблице 10 записей.
Пример 2
В этом примере подсчитываются уникальные значения для столбца пола
SELECT COUNT(DISTINCT gender) ОТ студента;
Результат:
СЧЕТ(РАЗЛИЧНЫЙ ПОЛ) |
2 |
Результат равен 2, так как есть 2 уникальных значения.
Пример 3
В этом примере COUNT и DISTINCT используются в другом порядке.
ВЫБЕРИТЕ РАЗЛИЧНОЕ СЧЕТЧИК (пол) ОТ студента;
Результат:
СЧЕТ(ПОЛ) |
10 |
Результат равен 10, потому что запрос фактически выполняет подсчет пола, а затем находит все отдельные строки. Поскольку единственная возвращенная строка имеет значение 10, она уже уникальна.
Пример 4
В этом примере используется столбец и функция COUNT.
ВЫБЕРИТЕ пол, количество(*) ОТ студента СГРУППИРОВАТЬ ПО ПОЛУ;
Результат:
ПОЛ | СЧЕТ(*) |
М | 6 |
Ф | 4 |
Вы можете видеть, что есть 6 учеников со значением M и 4 ученика со значением F.
Пример 5
В этом примере выполняется поиск количества студентов, у которых значение fee_paid больше или равно 100.
ВЫБЕРИТЕ СЧЕТ(*) ОТ студента ГДЕ fee_paid >= 100;
Результат:
СЧЕТ(*) |
8 |
Результат равен 8, потому что у двух студентов меньше 100 в fee_paid.
Пример 6
В этом примере определяется количество студентов, которые заплатили больше или равно 100, и разбивается по полу.
ВЫБЕРИТЕ пол, количество(*) ОТ студента ГДЕ fee_paid >= 100 СГРУППИРОВАТЬ ПО ПОЛУ;
Результат:
ПОЛ | СЧЕТ(*) |
М | 5 |
Ф | 3 |
Вы можете видеть, что есть 3 со значением F и 5 со значением M.