Merk
Tilgang til denne siden krever autorisasjon. Du kan prøve å logge på eller endre kataloger.
Tilgang til denne siden krever autorisasjon. Du kan prøve å endre kataloger.
Note
Denne funksjonen er for øyeblikket i offentlig forhåndsversjon. Denne forhåndsvisningen leveres uten en tjenesteavtale, og anbefales ikke for produksjonsarbeidsbelastninger. Enkelte funksjoner støttes kanskje ikke eller kan ha begrensede funksjoner. For mer informasjon, se Supplemental Terms of Use for Microsoft Azure Previews.
Filtrering begrenser resultatene dine til de radene som betyr noe. Aggregering oppsummerer disse radene i tellinger, totaler og gjennomsnitt. Denne artikkelen viser deg hvordan du kan bruke begge teknikkene i GQL-spørringer mot grafer i Microsoft Fabric.
Eksempler bruker eksempeldatasett fra sosiale nettverk. For en fullstendig referanse av GQL-utsagn og uttrykk, se GQL-språkguiden.
Forutsetninger
- Et grafelement med data lastet inn. Hvis du er ny på graf, fullfør veiledningen først.
- Kjennskap til grunnleggende
MATCHogRETURNspørringer. Se GQL-språkguiden.
Filterrader med FILTER
Bruk FILTER å beholde kun radene som oppfyller en betingelse. Plassering FILTER etter MATCH for å begrense de matchede resultatene.
Følgende søk gir alle kvinner navn og fødselsdato:
MATCH (p:Person)
FILTER p.gender = 'female'
RETURN p.firstName, p.lastName, p.birthday
Kombiner flere betingelser med AND og OR. For eksempel returnerer følgende søk navnene på alle kvinner født før 1990:
MATCH (p:Person)
FILTER p.gender = 'female' AND p.birthday < 19900101
RETURN p.firstName, p.lastName
Tips
For bedre ytelse, filtrer under mønstergjenkjenning med en inline-klausul WHERE i stedet for i en separat FILTER setning. Se Filter under mønstermatching.
Filter under mønstergjengivelse
Inline-klausuler WHERE inne i et MATCH mønster begrenser hvilke noder og kanter som matches før noen resultater produseres. Denne tilnærmingen er mer effektiv enn en post-match-klausul FILTER fordi spørringsmotoren beskjærer rader tidligere.
For eksempel, for å finne personer født før 1994 sammen med selskapet de jobber i, og begrense resultatene til selskaper hvis navn begynner med 'A':
MATCH (p:Person WHERE p.birthday < 19940101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name
Filter kantegenskaper på samme måte. For eksempel, å returnere kun personer som begynte å jobbe i et selskap i 2000 eller senere:
MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2000]->(c:Company)
RETURN p.firstName, p.lastName, c.name, w.workFrom
For mer om ytelsesforskjellen mellom inline- og post-match-filtrering, se Optimaliser GQL-spørringsytelse.
Håndter nullverdier i filtre
GQL bruker treverdilogikk: predikater evaluerer til TRUE, FALSE, eller UNKNOWN. Når en egenskapsverdi er null, returnerer UNKNOWNsammenligninger .
FILTER behandler UNKNOWN som ikke matchende, så raden er utelukket.
Bruk IS NULL og IS NOT NULL for å teste for nullverdier eksplisitt:
-- Only include people who have a nickname
MATCH (p:Person)
FILTER p.nickname IS NOT NULL
RETURN p.firstName, p.nickname
Bruk coalesce() for å erstatte en standardverdi når en egenskap kan være null:
MATCH (p:Person)
RETURN p.firstName, coalesce(p.nickname, p.firstName) AS displayName
Forsiktig!
NULL = NULL vurderer til UNKNOWN, ikke TRUE. Bruk den alltid IS NULL for å teste nullverdier, ikke likhet.
Samlede resultater med RETURN
Bruk aggregerte funksjoner for RETURN å oppsummere resultatene dine. GQL støtter , , , , min()og max(). avg()sum()count()
For eksempel, for å telle alle personer i grafen:
MATCH (p:Person)
RETURN count(*) AS totalPeople
For å telle ulike verdier som hvor mange forskjellige selskaper som ansetter folk:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN count(DISTINCT c) AS companyCount
Grupperesultater med GROUP BY
Bruk GROUP BY i RETURN for å gruppere rader etter delte verdier og beregne aggregater innenfor hver gruppe. Denne grupperingen er GQL-ekvivalenten til SQL GROUP BY.
For eksempel, for å telle ansatte per selskap:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC
Grupper etter flere kolonner og beregn flere aggregater samtidig. For eksempel, bryt ned antall personer og fødselsområde etter kjønn og nettleser, og gi de 10 vanligste kombinasjonene:
MATCH (p:Person)
LET gender = p.gender
LET browser = p.browserUsed
RETURN gender,
browser,
count(*) AS personCount,
min(p.birthday) AS earliestBirthday,
max(p.birthday) AS latestBirthday
GROUP BY gender, browser
ORDER BY personCount DESC
LIMIT 10
Note
Alle ikke-aggregerte uttrykk i RETURN må forekomme i GROUP BY. Uttrykk som ikke er i GROUP BY må bruke en aggregert funksjon.
Sorter og begrens aggregerte resultater
Bruk ORDER BY og LIMIT sammen GROUP BY for å finne topp-N resultater.
For eksempel, for å finne de fem største byene etter antall innbyggere:
MATCH (p:Person)-[:isLocatedIn]->(city:City)
LET cityName = city.name
RETURN cityName, count(*) AS residentCount
GROUP BY cityName
ORDER BY residentCount DESC
LIMIT 5
Viktig!
Plasser ORDER BY før LIMIT.
LIMIT gjelder alltid for det allerede sorterte resultatsettet.
Bruk CASE for betingede verdier i resultater
Bruk CASE/ELSETHENWHEN//til å beregne betingede verdier i RETURN eller .LET
For eksempel, for å kategorisere folk i epoker basert på fødselsår:
MATCH (p:Person)
RETURN p.firstName,
CASE WHEN p.birthday < 19800101 THEN 'Before 1980'
WHEN p.birthday < 20000101 THEN '1980–1999'
ELSE '2000 or later'
END AS era