Aggregation functions

    Use the GROUP BY clause as an identifier, ordinal, or expression.

    Ordinal

    1. SELECT gender, sum(age) FROM accounts GROUP BY 1;
    gendersum (age)
    F28
    M101

    Expression

    1. SELECT abs(account_number), sum(age) FROM accounts GROUP BY abs(account_number);
    abs(account_number)sum (age)
    132
    1328
    1833
    636

    Use aggregations as a select, expression, or an argument of an expression.

    Argument

    1. SELECT gender, sum(age) * 2 as sum2 FROM accounts GROUP BY gender;
    gendersum2
    F56
    M202

    Expression

    1. SELECT gender, sum(age * 2) as sum2 FROM accounts GROUP BY gender;
    gendersum2
    F56
    M202
    • COUNT(field) - Only counts if given a field (or expression) is not null or missing in the input rows.
    • COUNT(1) (same as COUNT(*)) - Counts any non-null literal.

    Use the HAVING clause to filter out aggregated values.

    HAVING with GROUP BY

    You can use aggregate expressions or its aliases defined in a SELECT clause in a HAVING condition.

    The aggregations in a HAVING clause are not necessarily the same as that in a select list. As an extension to the SQL standard, you’re not restricted to using identifiers only in the GROUP BY list. For example:

    Here’s another example for using an alias in a condition.

    1. SELECT gender, sum(age) AS s
    2. FROM accounts
    3. GROUP BY gender
    4. HAVING s > 100;
    genders
    M101

    HAVING without GROUP BY

    You can use a HAVING clause without the GROUP BY clause. This is useful because aggregations are not supported in a WHERE clause:

    1. SELECT 'Total of age > 100'
    2. HAVING sum(age) > 100;
    Total of age > 100
    Total of age > 100