Neo4J 查询以获得前 N 个结果
Neo4J query to get top N results
我有一个名为 Airports
的节点,其中包含有关机场的数据,还有一个名为 Routes
的节点,其中有大量往返机场的航班 (SourceID, DestinationID
)。
该节点上的数据如下所示:
Airline
AirlineID
Source
SourceID
Destination
DestinationID
Codeshare
Stops
Equipment
2B
410
AER
2965
KZN
2990
0
CR2
2B
410
ASF
2966
KZN
2990
0
CR2
2B
410
ASF
2966
MRV
2962
0
CR2
2B
410
CEK
2968
KZN
2990
0
CR2
我已经创建了关系类型 (1) SOURCE & (2) DESTINATION 显示到其他机场的方向
- SourceID -> DestinationID
- DestinationID -> SourceID
我需要对 return 航班总数(进港/出港)最多的前 5 个机场进行查询。
当运行以下代码结果正确时:
MATCH (f)-[:SOURCE]->(a:Airport)
WITH a, COUNT(*) as Count
RETURN a.name AS AirportName, Count AS TotalFlights
ORDER BY Count DESC LIMIT 5;
如果我尝试运行以下以获得总航班数,结果不是。
MATCH (f)-[:SOURCE]->(a:Airport)<-[:DESTINATION]-(f)
WITH a, COUNT(*) as Count
RETURN a.name AS AirportName, Count AS TotalFlights
ORDER BY Count DESC LIMIT 5;
谁能帮帮我?我是 NEO4J 的新手。
也许你可以只统计关系(即统计机场节点的度数):
MATCH (a:Airport)
RETURN a.name as AirportName, size( (a)-[:SOURCE|DESTINATION]-() ) as TotalFlights
ORDER BY TotalFlights DESC LIMIT 5;
还有一个获取节点度数的apoc函数
您的查询 returns 没有结果,因为您只为单个 route
节点分配了相同的变量 f
两次。因此,此查询将仅计算与同一机场有 SOURCE
和 DESTINATION
关系的路线(通常没有多大意义)。
MATCH (f)-[:SOURCE]->(a:Airport)<-[:DESTINATION]-(f)
WITH a, COUNT(*) as Count
RETURN a.name AS AirportName, Count AS TotalFlights
ORDER BY Count DESC LIMIT 5;
按照其他人的建议,简单地计算关系(获得节点度)应该就足够了:
MATCH (a:Airport)
WITH a, SIZE((a)<-[:SOURCE|DESTINATION]-()) as numOfFlights
RETURN a.name as airportName, numOfFlights
ORDER BY numOfFlights DESC
LIMIT 5;
我有一个名为 Airports
的节点,其中包含有关机场的数据,还有一个名为 Routes
的节点,其中有大量往返机场的航班 (SourceID, DestinationID
)。
该节点上的数据如下所示:
Airline | AirlineID | Source | SourceID | Destination | DestinationID | Codeshare | Stops | Equipment |
---|---|---|---|---|---|---|---|---|
2B | 410 | AER | 2965 | KZN | 2990 | 0 | CR2 | |
2B | 410 | ASF | 2966 | KZN | 2990 | 0 | CR2 | |
2B | 410 | ASF | 2966 | MRV | 2962 | 0 | CR2 | |
2B | 410 | CEK | 2968 | KZN | 2990 | 0 | CR2 |
我已经创建了关系类型 (1) SOURCE & (2) DESTINATION 显示到其他机场的方向
- SourceID -> DestinationID
- DestinationID -> SourceID
我需要对 return 航班总数(进港/出港)最多的前 5 个机场进行查询。
当运行以下代码结果正确时:
MATCH (f)-[:SOURCE]->(a:Airport)
WITH a, COUNT(*) as Count
RETURN a.name AS AirportName, Count AS TotalFlights
ORDER BY Count DESC LIMIT 5;
如果我尝试运行以下以获得总航班数,结果不是。
MATCH (f)-[:SOURCE]->(a:Airport)<-[:DESTINATION]-(f)
WITH a, COUNT(*) as Count
RETURN a.name AS AirportName, Count AS TotalFlights
ORDER BY Count DESC LIMIT 5;
谁能帮帮我?我是 NEO4J 的新手。
也许你可以只统计关系(即统计机场节点的度数):
MATCH (a:Airport)
RETURN a.name as AirportName, size( (a)-[:SOURCE|DESTINATION]-() ) as TotalFlights
ORDER BY TotalFlights DESC LIMIT 5;
还有一个获取节点度数的apoc函数
您的查询 returns 没有结果,因为您只为单个 route
节点分配了相同的变量 f
两次。因此,此查询将仅计算与同一机场有 SOURCE
和 DESTINATION
关系的路线(通常没有多大意义)。
MATCH (f)-[:SOURCE]->(a:Airport)<-[:DESTINATION]-(f)
WITH a, COUNT(*) as Count
RETURN a.name AS AirportName, Count AS TotalFlights
ORDER BY Count DESC LIMIT 5;
按照其他人的建议,简单地计算关系(获得节点度)应该就足够了:
MATCH (a:Airport)
WITH a, SIZE((a)<-[:SOURCE|DESTINATION]-()) as numOfFlights
RETURN a.name as airportName, numOfFlights
ORDER BY numOfFlights DESC
LIMIT 5;