[discrete] [[esql-agg-count]] === `COUNT` *Syntax* [source,esql] ---- COUNT([expression]) ---- *Parameters* `expression`:: Expression that outputs values to be counted. If omitted, equivalent to `COUNT(*)` (the number of rows). *Description* Returns the total number (count) of input values. *Supported types* Can take any field type as input. *Examples* [source.merge.styled,esql] ---- include::{esql-specs}/stats.csv-spec[tag=count] ---- [%header.monospaced.styled,format=dsv,separator=|] |=== include::{esql-specs}/stats.csv-spec[tag=count-result] |=== To count the number of rows, use `COUNT()` or `COUNT(*)`: [source.merge.styled,esql] ---- include::{esql-specs}/docs.csv-spec[tag=countAll] ---- [%header.monospaced.styled,format=dsv,separator=|] |=== include::{esql-specs}/docs.csv-spec[tag=countAll-result] |=== The expression can use inline functions. This example splits a string into multiple values using the `SPLIT` function and counts the values: [source.merge.styled,esql] ---- include::{esql-specs}/stats.csv-spec[tag=docsCountWithExpression] ---- [%header.monospaced.styled,format=dsv,separator=|] |=== include::{esql-specs}/stats.csv-spec[tag=docsCountWithExpression-result] |=== [[esql-agg-count-or-null]] To count the number of times an expression returns `TRUE` use a <> command to remove rows that shouldn't be included: [source.merge.styled,esql] ---- include::{esql-specs}/stats.csv-spec[tag=count-where] ---- [%header.monospaced.styled,format=dsv,separator=|] |=== include::{esql-specs}/stats.csv-spec[tag=count-where-result] |=== To count the same stream of data based on two different expressions use the pattern `COUNT( OR NULL)`: [source.merge.styled,esql] ---- include::{esql-specs}/stats.csv-spec[tag=count-or-null] ---- [%header.monospaced.styled,format=dsv,separator=|] |=== include::{esql-specs}/stats.csv-spec[tag=count-or-null-result] |===