## Syntax
```mermaid
%%{init: {
'theme': 'base',
'flowchart': { 'padding': '7', 'nodeSpacing': '20', 'rankSpacing': '20' },
'themeVariables': {
'fontSize': '11px',
'fontFamily': 'Arial'
}
}}%%
flowchart TD
countAggregateFunction_start((START))
countAggregateFunction_start --> countAggregateFunction_0_0[COUNT]:::quoted
countAggregateFunction_0_0 --> countAggregateFunction_0_1["("]:::quoted
countAggregateFunction_0_1 --> countAggregateFunction_0_2[DISTINCT]:::quoted
countAggregateFunction_0_1 --> countAggregateFunction_0_3[<a href="Invantive UniversalSQL/Grammar/Query Statement/Select Statement#part" class="internal-link">part</a>]
countAggregateFunction_0_2 --> countAggregateFunction_0_3[<a href="Invantive UniversalSQL/Grammar/Query Statement/Select Statement#part" class="internal-link">part</a>]
countAggregateFunction_0_3 --> countAggregateFunction_0_4[")"]:::quoted
countAggregateFunction_0_4 --> countAggregateFunction_end((END))
```
## Purpose
Group function to find the number of values from a group of values. `count(*)` counts all rows, including rows with solely `null` values. `count(expression)` counts the rows for which the expression does not evaluate to `null`. `count(distinct expression)` counts the unique non-`null` values.
## Examples
The following example counts the number of customers in a customer base of five customers:
```sql
select count(*)
from csvtable
( passing 'Acme Industries#Manufacturing#12500#50000|Bergmann GmbH#Manufacturing#0#25000|Carlson Ltd#Wholesale#2500#10000|Dubois SA#Wholesale#7500#10000|Everest BV#Services##5000'
row delimiter '|'
column delimiter '#'
columns name varchar2 position next
, segment varchar2 position next
, balance number position next
, credit_limit number position next
) cus
-------------------
5
```
The following example shows the difference between the three variants: five customers, of which four have an outstanding balance (the balance of Everest BV is `null`), spread over three unique segments:
```sql
select count(*)
, count(cus.balance)
, count(distinct cus.segment)
from csvtable
( passing 'Acme Industries#Manufacturing#12500#50000|Bergmann GmbH#Manufacturing#0#25000|Carlson Ltd#Wholesale#2500#10000|Dubois SA#Wholesale#7500#10000|Everest BV#Services##5000'
row delimiter '|'
column delimiter '#'
columns name varchar2 position next
, segment varchar2 position next
, balance number position next
, credit_limit number position next
) cus
-------------------
5 4 3
```
The following example counts the number of contact persons per customer, for instance to find customers without a billing contact:
```sql
select cnt.customer_name
, count(*)
from csvtable
( passing 'Acme Industries#Alice Johnson#CFO|Acme Industries#Tom Peters#Accounts Payable|Bergmann GmbH#Erika Weber#Controller|Carlson Ltd#James Smith#CFO|Dubois SA#Marie Dupont#Accounts Payable'
row delimiter '|'
column delimiter '#'
columns customer_name varchar2 position next
, contact_name varchar2 position next
, role varchar2 position next
) cnt
group
by cnt.customer_name
order
by cnt.customer_name
-------------------
Acme Industries 2
Bergmann GmbH 1
Carlson Ltd 1
Dubois SA 1
```