Узнать сколько строк в таблице sql
Analytic Functions for information on syntax, semantics, and restrictions
COUNT returns the number of rows returned by the query. You can use it as an aggregate or analytic function.
If you specify DISTINCT , then you can specify only the query_partition_clause of the analytic_clause . The order_by_clause and windowing_clause are not allowed.
If you specify expr , then COUNT returns the number of rows where expr is not null. You can count either all rows, or only distinct values of expr .
If you specify the asterisk (*), then this function returns all rows, including duplicates and nulls. COUNT never returns null.
Before performing a COUNT (DISTINCT expr ) operation on a large amount of data, consider using one of the following methods to obtain approximate results more quickly than exact results:
Set the APPROX_FOR_COUNT_DISTINCT initialization parameter to true before using the COUNT (DISTINCT expr ) function. Refer to Oracle Database Reference for more information on this parameter.
Use the APPROX_COUNT_DISTINCT function instead of the COUNT (DISTINCT expr ) function. Refer to APPROX_COUNT_DISTINCT.
«About SQL Expressions» for information on valid forms of expr and Aggregate Functions
Appendix C in Oracle Database Globalization Support Guide for the collation determination rules, which define the collation COUNT uses to compare character values for the DISTINCT clause
The following examples use COUNT as an aggregate function:
The following example calculates, for each employee in the employees table, the moving count of employees earning salaries in the range 50 less than through 150 greater than the employee’s salary.
SQL COUNT() Function
The COUNT() function returns the number of rows that matches a specified criteria.
SQL COUNT(column_name) Syntax
The COUNT(column_name) function returns the number of values (NULL values will not be counted) of the specified column:
SQL COUNT(*) Syntax
The COUNT(*) function returns the number of records in a table:
SQL COUNT(DISTINCT column_name) Syntax
The COUNT(DISTINCT column_name) function returns the number of distinct values of the specified column:
Note: COUNT(DISTINCT) works with ORACLE and Microsoft SQL Server, but not with Microsoft Access.
Demo Database
In this tutorial we will use the well-known Northwind sample database.
Below is a selection from the "Orders" table:
| OrderID | CustomerID | EmployeeID | OrderDate | ShipperID |
|---|---|---|---|---|
| 10265 | 7 | 2 | 1996-07-25 | 1 |
| 10266 | 87 | 3 | 1996-07-26 | 3 |
| 10267 | 25 | 4 | 1996-07-29 | 1 |
SQL COUNT(column_name) Example
The following SQL statement counts the number of orders from "CustomerID"=7 from the "Orders" table:
Example
SQL COUNT(*) Example
The following SQL statement counts the total number of orders in the "Orders" table:
Example
SQL COUNT(DISTINCT column_name) Example
The following SQL statement counts the number of unique customers in the "Orders" table:
Example
W3SCHOOLS EXAMS
COLOR PICKER
SHARE THIS PAGE
LEARN MORE:
Your Suggestion:
Thank You For Helping Us!
Your message has been sent to W3Schools.
Top 10 Tutorials
Top 10 References
Top 10 Examples
Web Certificates
W3Schools is optimized for learning, testing, and training. Examples might be simplified to improve reading and basic understanding. Tutorials, references, and examples are constantly reviewed to avoid errors, but we cannot warrant full correctness of all content. While using this site, you agree to have read and accepted our terms of use, cookie and privacy policy. Copyright 1999-2016 by Refsnes Data. All Rights Reserved.
MySQL Как быстро посчитать все строки в таблице
Существует несколько способов получить количество строк в таблице MySQL. Некоторые продукты управления базами данных предоставляют статистику базы данных, например, размеры таблиц, но это можно сделать и с помощью прямого SQL.
Считать кол-во строк в PHP почти всегда непроизводительно.
- information_schema.TABLES
- SHOW TABLE STATUS
- SQL_CALC_FOUND_ROWS
- Функция COUNT()
- Подсчет всех строк в таблице
- Подсчет не-NULL строк — разница между COUNT() и COUNT(*)
- Подсчет только NULL строк
- Подсчет уникальных значений
- Условные подсчеты с использованием выражений
information_schema.TABLES
Это способ позволяет получить данные о колличестве строк во всей таблице (без учета WHERE). Такие данные храняться в служебной таблице information_schema.TABLES :
Этот метод очень быстрый, но не точный, поскольку данные в information_schema о количестве строк и фактическое количество строк в таблицах не всегда синхронизированы. Чтобы этого избежать, необходимо выполнить оператор ANALYZE TABLE перед запросом к таблице information_schema.
SHOW TABLE STATUS
Мы также можем получить данные таблицы следующим запросом:
В колонке Rows находится кол-во строк в таблице.
SQL_CALC_FOUND_ROWS
Этот способ не самый быстрый, но есть случай, когда COUNT(*) не подходит, например когда результаты группируются, можно столкнуться с проблемой, что COUNT на самом деле не считает все строки.
Решением является SQL_CALC_FOUND_ROWS — этот маркер нужно добавить сразу после SELECT :
После запроса кол-во всех строк нужно получить еще одним запросом — он должен быть сделан сразу после запроса на выборку данных:
Функция COUNT()
При COUNT(*) учитываются индексы столбцов, поэтому результат будет хорошим по производительности. Также, стоит отметить, что таблица MySQL с движком MyISAM хранит количество строк как впомогательные данные к таблице и он не считает все строки каждый раз при запросе если это возможно.
Если COUNT(*) работает медленно, нужно добавить в начало запроса маркер EXPLAIN и проверить, какие индексы используются, и где их следует добавить.
Функция COUNT() считает количество строк в таблице. Она подходит для подсчета как всех строк таблицы, так и строк подходящих под условие WHERE. Есть несколько сигнатур:
COUNT(*) — получит всё не-NULL и NULL строки (одинаковые значения считаются по отдельности).
COUNT(expr) — возвращает набор результатов, не содержащих NULL строк.
COUNT(DISTINCT expr) — возвращает количество уникальных строк, не содержащих значений NULL.
В каждом случае COUNT() возвращает BIGINT — количество совпавших строк. Или ноль, если не было найдено ни одной.
Подсчет всех строк в таблице
Чтобы подсчитать все строки в таблице, независимо от того, содержат они значения NULL или нет, используйте COUNT(*). Такая запись в основном возвращает количество строк в наборе результатов, возвращенных оператором SELECT.
Вызов COUNT(*) без WHERE или дополнительных столбцов, будет работать очень быстро в таблицах MyISAM, поскольку количество строк хранится в столбце table_rows в таблице tables базы данных information_schema .
Для транзакционных систем хранения данных, таких как InnoDB, хранение точного количества строк проблематично, поскольку InnoDB не ведет внутренний подсчет строк в таблице. Если бы он велся, то одновременные транзакции могли бы «видеть» разное количество строк в одно и то же время. Следовательно, операторы SELECT COUNT() подсчитывают только строки, видимые текущей транзакции. Это означает, что выполнение запроса с COUNT() при большой нагрузке может привести к неточным числам.
Подсчет не-NULL строк — разница между COUNT() и COUNT(*)
Если в COUNT() ничего не передавать, то выполняется версия функции COUNT(expr) , но без параметров. Вызов COUNT() таким образом возвращает только строки, где нет NULL. Например, у нас есть таблица code_values:
Запрос COUNT() вернет 2, хотя в таблице 4 строки:
Обратите внимание, что эта версия функции COUNT() используется редко, потому что NULL-строки не должны быть проблемой в базах данных. Они могут создать проблемы только в том случае, если таблица не имеет первичного ключа. В большинстве случаев COUNT(*) будет работать просто отлично.
COUNT(expr) может принимать правильные выражения. Еще один запрос, который одинаково извлекает NULL и не NULL строки:
Подсчет только NULL строк
Версия функции COUNT(expr) также принимает имена отдельных столбцов, в результате чего COUNT(имя_столбца) возвращает количество записей, в которых имя_столбца не является NULL. Следовательно, следующий запрос SELECT получит количество строк, в которых столбец description содержит не NULL-значения:
Подсчет уникальных значений
Функция COUNT(DISTINCT) возвращает количество строк с уникальными не-NULL значениями. Следовательно, включение ключевого слова DISTINCT исключает дубликаты строк из подсчета. Синтаксис функции следующий:
Как и в обычной функции COUNT(), параметры expr выше могут быть любыми выражениями, включая конкретные столбцы, все столбцы (*), возвращаемые значения функций или выражения, такие как операторы IF/CASE.
Пример. Допустим, у нас есть следующая таблица клиентов:
Вызов COUNT(*) вернет количество всех строк (4), а COUNT DISTINCT по last_name каждую строку где дублирующие last_name будут считаться за одну строку, так что в итоге мы получим 3:
Условные подсчеты с использованием выражений
Параметры функции COUNT() не ограничиваются именами столбцов; возвращаемые значения функций и выражения, такие как операторы IF/CASE, также будут работать.
Вот таблица, содержащая номера телефонов и пол нескольких пользователей:
Предположим, что мы хотим создать запрос, который сообщает нам, сколько разных женщин и мужчин содержится в таблице. Человек идентифицируется по номеру телефона («tel»). Один и тот же номер может встречаться несколько раз, но пол этого номера должен учитываться только один раз.
Вот один из вариантов использования отдельного COUNT DISTINCT для каждого столбца:
Count table rows
What is the MySQL command to retrieve the count of records in a table?
![]()
12 Answers 12
will count the number of rows in the table.
Because nobody mentioned it:
lists all tables along with some additional information, including estimated rows for each table. This is what phpMyAdmin is using for its database page.
This information is available in MySQL 4, probably in MySQL 3.23 too — long time prior information schema database.
The number shown is estimated for InnoDB and TokuDB but it is absolutely correct for MyISAM and Aria (Maria) storage engines.
The number of rows. Some storage engines, such as MyISAM, store the exact count. For other storage engines, such as InnoDB, this value is an approximation, and may vary from the actual value by as much as 40% to 50%. In such cases, use SELECT COUNT(*) to obtain an accurate count.
This also is fastest way to see the row count on MySQL, because query like:
Doing full table scan what could be very expensive operation that might take hours on large high load server. It also increase disk I/O.
The same operation might block the table for inserts and updates — this happen only on exotic storage engines.