The count() function¶
The count()
function calculates the number of the specified values or rows.
- (nGQL-extension) You can use
count()
andGROUP BY
together to group and count the number of specific values. UseYIELD
to return. - (OpenCypher style) You can use
count()
andRETURN
.GROUP BY
is not necessary.
Syntax¶
count({expr | *})
- count(*) returns the number of rows (including NULL).
- count(expr) return non-NULL values return by an expression.
- count() and size() are different.
Examples¶
nebula> WITH [NULL, 1, 1, 2, 2] As a UNWIND a AS b RETURN count(b), count(*), count(DISTINCT b)
+----------+----------+-------------------+
| COUNT(b) | COUNT(*) | COUNT(distinct b) |
+----------+----------+-------------------+
| 4 | 5 | 2 |
+----------+----------+-------------------+
nebula> GO FROM "player101" OVER follow BIDIRECT YIELD $$.player.name AS Name | \
GROUP BY $-.Name YIELD $-.Name, count(*);
+---------------------+----------+
| $-.Name | COUNT(*) |
+---------------------+----------+
| "Dejounte Murray" | 1 |
+---------------------+----------+
| "LaMarcus Aldridge" | 2 |
+---------------------+----------+
| "Tim Duncan" | 2 |
+---------------------+----------+
| "Marco Belinelli" | 1 |
+---------------------+----------+
| "Manu Ginobili" | 1 |
+---------------------+----------+
| "Boris Diaw" | 1 |
+---------------------+----------+
The statement in the preceding example searches for:
- People whom
player101
follows. - People who follow
player101
.
And retrieves two columns:
$-.Name
, the names of the people.COUNT(*)
, how many times the names show up.
Because there are no duplicate names in the basketballplayer
dataset, the number 2
in the result shows that the person in that row and player101
have followed each other.
nebula> LOOKUP ON player YIELD player.age As playerage \|
GROUP BY $-.playerage YIELD $-.playerage as age, count(*) AS number | ORDER BY number DESC, age DESC
+-----+--------+
| age | number |
+-----+--------+
| 34 | 4 |
+-----+--------+
| 33 | 4 |
+-----+--------+
| 30 | 4 |
+-----+--------+
| 29 | 4 |
+-----+--------+
| 38 | 3 |
+-----+--------+
...
nebula> MATCH (n:player) RETURN n.age as age, count(*) as number ORDER BY number DESC, age DESC
+-----+--------+
| age | number |
+-----+--------+
| 34 | 4 |
+-----+--------+
| 33 | 4 |
+-----+--------+
| 30 | 4 |
+-----+--------+
| 29 | 4 |
+-----+--------+
| 38 | 3 |
+-----+--------+
The two statements in the preceding examples retrieves the age distribution of the players in the dataset.
nebula> MATCH (v:player{name:"Tim Duncan"}) -- (v2) RETURN count(DISTINCT v2)
+--------------------+
| COUNT(distinct v2) |
+--------------------+
| 11 |
+--------------------+
nebula> MATCH (n:player {name : "Tim Duncan"})-[]->(friend:player)-[]->(fof:player) RETURN count(fof), count(DISTINCT fof)
+------------+---------------------+
| COUNT(fof) | COUNT(distinct fof) |
+------------+---------------------+
| 4 | 3 |
+------------+---------------------+
count(NULL)¶
nebula> RETURN count(NULL), size(NULL)
+-------------+------------+
| COUNT(NULL) | size(NULL) |
+-------------+------------+
| 0 | __NULL__ |
+-------------+------------+
Last update: April 13, 2021