Use the `COUNT` function to accept arguments such as a `*` or a literal like `1`.
The meaning of these different forms are as follows:
-`COUNT(field)` - Only counts if given a field (or expression) is not null or missing in the input rows.
-`COUNT(*)` - Counts the number of all its input rows.
-`COUNT(1)` (same as `COUNT(*)`) - Counts any non-null literal.
## Having
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.
We recommend using a non-aggregate expression in the `WHERE` clause although you can do this in a `HAVING` clause.
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:
```sql
SELECTgender,sum(age)
FROMaccounts
GROUPBYgender
HAVINGsum(age)>100;
```
| gender | sum (age)
:--- | :---
M | 101 |
Here's another example for using an alias in a `HAVING` condition.
```sql
SELECTgender,sum(age)ASs
FROMaccounts
GROUPBYgender
HAVINGs>100;
```
| gender | s
:--- | :---
M | 101 |
If an identifier is ambiguous, for example, present both as a select alias and as an index field (preference is alias). In this case, the identifier is replaced with an expression aliased in the `SELECT` clause:
### 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: