count
Counts the number of rows or not-NULL values.
ClickHouse supports the following syntaxes for count
:
- count(expr)
or COUNT(DISTINCT expr)
.
- count()
or COUNT(*)
. The count()
syntax is ClickHouse-specific.
Arguments
The function can take:
- Zero parameters.
- One expression.
Returned value
- If the function is called without parameters it counts the number of rows.
- If the expression is passed, then the function counts how many times this expression returned not null. If the expression returns a Nullable-type value, then the result of
count
stays notNullable
. The function returns 0 if the expression returnedNULL
for all the rows.
In both cases the type of the returned value is UInt64.
Details
ClickHouse supports the COUNT(DISTINCT ...)
syntax. The behavior of this construction depends on the count_distinct_implementation setting. It defines which of the uniq* functions is used to perform the operation. The default is the uniqExact function.
The SELECT count() FROM table
query is not optimized, because the number of entries in the table is not stored separately. It chooses a small column from the table and counts the number of values in it.
Examples
Example 1:
SELECT count() FROM t
┌─count()─┐
│ 5 │
└─────────┘
Example 2:
SELECT name, value FROM system.settings WHERE name = 'count_distinct_implementation'
┌─name──────────────────────────┬─value─────┐
│ count_distinct_implementation │ uniqExact │
└───────────────────────────────┴───────────┘
SELECT count(DISTINCT num) FROM t
┌─uniqExact(num)─┐
│ 3 │
└────────────────┘
This example shows that count(DISTINCT num)
is performed by the uniqExact
function according to the count_distinct_implementation
setting value.