Skip to content

COUNT

Calculates either the number of non-NULL values in the specified column or the total number of records in the table.

Syntax

Aggregate Function

sql
COUNT([DISTINCT] expr)

COUNT(*)

Window Function

sql
COUNT([DISTINCT] expr) OVER (
                                [PARTITION BY part]
                                [ORDER BY ord [ASC|DESC] [window_frame]]
                                )

Arguments

expr: A (qualified) column name.


part (optional): Expression to partition by.


ord (optional): Optional expression to sort within each partition.


window_frame: Defines the subset of rows within the window for which the aggregated values are to be returned.

Example 1 | Aggregate Function and 'DISTINCT' Clause

sql
select  count(*),
        count(col1) as result1,
        count(DISTINCT col1) as result2,
        count(col2) as result3,
        count(DISTINCT col2) as result4
             from  (select 'a' as ord1, 'g1' as grp1, '10' as col1, 10 as col2
                    union all 
                    select 'b' as ord1, 'g1' as grp1, '20' as col1, 20 as col2
                    union all
                    select 'c' as ord1, 'g1' as grp1, '20' as col1, 20 as col2
                    union all 
                    select 'a' as ord1, 'g2' as grp1, '30' as col1, NULL as col2 
                    union all 
                    select 'b' as ord1, 'g2' as grp1, '30' as col1, NULL as col2 
                    union all 
                    select 'c' as ord1, 'g2' as grp1, '40' as col1, 40 as col2
                    union all 
                    select 'a' as ord1, 'g3' as grp1, '50' as col1, NULL as col2
                    union all 
                    select 'b' as ord1, 'g3' as grp1, '50' as col1, NULL as col2
                    union all 
                    select 'c' as ord1, 'g3' as grp1, '60' as col1, 60 as col2
                    union all
                    select 'd' as ord1, 'g3' as grp1, '50' as col1, 50 as col2                    
                    union all
                    select NULL as ord1, NULL as grp1, NULL as col1, NULL as col2);
+----------+---------+---------+---------+---------+
| COUNT(*) | RESULT1 | RESULT2 | RESULT3 | RESULT4 |
+----------+---------+---------+---------+---------+
| 11       | 10      | 6       | 6       | 5       |
+----------+---------+---------+---------+---------+

Example 2 | Aggregate Function and 'GROUP BY' Clause

sql
select grp1, 
       count(col1) as result1,
       count(col2) as result2
             from  (select 'a' as ord1, 'g1' as grp1, '10' as col1, 10 as col2
                    union all 
                    select 'b' as ord1, 'g1' as grp1, '20' as col1, 20 as col2
                    union all
                    select 'c' as ord1, 'g1' as grp1, '20' as col1, 20 as col2
                    union all 
                    select 'a' as ord1, 'g2' as grp1, '30' as col1, NULL as col2 
                    union all 
                    select 'b' as ord1, 'g2' as grp1, '30' as col1, NULL as col2 
                    union all 
                    select 'c' as ord1, 'g2' as grp1, '40' as col1, 40 as col2
                    union all 
                    select 'a' as ord1, 'g3' as grp1, '50' as col1, NULL as col2
                    union all 
                    select 'b' as ord1, 'g3' as grp1, '50' as col1, NULL as col2
                    union all 
                    select 'c' as ord1, 'g3' as grp1, '60' as col1, 60 as col2
                    union all
                    select 'd' as ord1, 'g3' as grp1, '50' as col1, 50 as col2
                    union all
                    select NULL as ord1, NULL as grp1, NULL as col1, NULL as col2)
        group by grp1;
+----------+---------+---------+
|   GRP1   | RESULT1 | RESULT2 |
+----------+---------+---------+
| NULL     | 0       | 0       |
| g1       | 3       | 3       |
| g3       | 4       | 2       |
| g2       | 3       | 1       |
+----------+---------+---------+

Example 3 | Window Function

sql
select  grp1, 
        ord1, 
        col1,
        count(col1) OVER(PARTITION BY grp1) as result1,
        count(col1) OVER(PARTITION BY grp1 ORDER BY ord1 ASC) as result2,
        count(col1) OVER(PARTITION BY grp1 ORDER BY ord1 DESC) as result3
             from  (select 'a' as ord1, 'g1' as grp1, '10' as col1, 10 as col2
                    union all 
                    select 'b' as ord1, 'g1' as grp1, '20' as col1, 20 as col2
                    union all
                    select 'c' as ord1, 'g1' as grp1, '20' as col1, 20 as col2
                    union all 
                    select 'a' as ord1, 'g2' as grp1, '30' as col1, NULL as col2 
                    union all 
                    select 'b' as ord1, 'g2' as grp1, '30' as col1, NULL as col2 
                    union all 
                    select 'c' as ord1, 'g2' as grp1, '40' as col1, 40 as col2
                    union all 
                    select 'a' as ord1, 'g3' as grp1, '50' as col1, NULL as col2
                    union all 
                    select 'b' as ord1, 'g3' as grp1, '50' as col1, NULL as col2
                    union all 
                    select 'c' as ord1, 'g3' as grp1, '60' as col1, 60 as col2
                    union all
                    select 'd' as ord1, 'g3' as grp1, '50' as col1, 50 as col2
                    union all
                    select NULL as ord1, NULL as grp1, NULL as col1, NULL as col2);
+------+------+------+---------+---------+---------+
| GRP1 | ORD1 | COL1 | RESULT1 | RESULT2 | RESULT3 |
+------+------+------+---------+---------+---------+
| g1   | a    | 10   | 3       | 1       | 3       |
| g1   | b    | 20   | 3       | 2       | 2       |
| g1   | c    | 20   | 3       | 3       | 1       |
| g2   | a    | 30   | 3       | 1       | 3       |
| g2   | b    | 30   | 3       | 2       | 2       |
| g2   | c    | 40   | 3       | 3       | 1       |
| g3   | a    | 50   | 4       | 1       | 4       |
| g3   | b    | 50   | 4       | 2       | 3       |
| g3   | c    | 60   | 4       | 3       | 2       |
| g3   | d    | 50   | 4       | 4       | 1       |
| NULL | NULL | NULL | 0       | 0       | 0       |
+------+------+------+---------+---------+---------+