Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Filtrováním se výsledky zužují na řádky, na které záleží. Agregace shrnuje tyto řádky do počtů, součtů a průměrů. V tomto článku se dozvíte, jak použít obě techniky v dotazech GQL na graf v Microsoft Fabric.
Příklady používají ukázkovou datovou sadu sociální sítě. Úplný odkaz na příkazy a výrazy jazyka GQL najdete v průvodci jazykem GQL.
Předpoklady
- Položka grafu s načtenými daty Pokud s grafem teprve začínáte, nejprve dokončete kurz .
- Znalost základních dotazů
MATCHaRETURNViz průvodce jazykem GQL.
Filtrování řádků pomocí funkce FILTER
Slouží FILTER k zachování pouze řádků, které splňují podmínku. Umístěte FILTER po MATCH pro zúžení odpovídajících výsledků.
Následující dotaz vrátí všechny ženy s jejich jménem a datem narození:
MATCH (p:Person)
FILTER p.gender = 'female'
RETURN p.firstName, p.lastName, p.birthday
Kombinování více podmínek s AND a OR. Například následující dotaz vrátí jména všech žen, které se narodily před 1990:
MATCH (p:Person)
FILTER p.gender = 'female' AND p.birthday < 19900101
RETURN p.firstName, p.lastName
Tip
Pro zajištění lepšího výkonu filtrujte během porovnávání vzorů pomocí vložené WHERE klauzule, spíše než v samostatném FILTER příkazu. Viz Filtr během porovnávání vzorů.
Filtrování během porovnávání vzorů
Vložené WHERE klauzule uvnitř MATCH vzoru omezují, které uzly a hrany se shodují před vytvořením výsledků. Tento přístup je efektivnější než klauzule po vyhodnocení shody FILTER, protože dotazovací stroj vyřadí řádky dříve.
Pokud například chcete najít lidi, kteří se narodili před 1994, společně se společností, kde pracují, omezte výsledky na společnosti, jejichž jméno začíná na "A":
MATCH (p:Person WHERE p.birthday < 19940101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name
Vlastnosti okrajů můžete filtrovat stejným způsobem. Pokud například chcete vrátit jenom lidi, kteří začali pracovat ve společnosti v roce 2000 nebo novějším:
MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2000]->(c:Company)
RETURN p.firstName, p.lastName, c.name, w.workFrom
Další informace o rozdílu výkonu mezi interním a po vyhodnocení filtrováním najdete v dokumentu Optimalizace výkonu dotazů GQL.
Zpracování hodnot null ve filtrech
Funkce GQL používá tříhodnotovou logiku: predikáty se vyhodnocují jako TRUE, FALSEnebo UNKNOWN. Pokud je hodnota vlastnosti null, vrátí porovnání UNKNOWN.
FILTER
UNKNOWN považuje za neodpovídající, takže řádek je vyloučený.
Použijte IS NULL a IS NOT NULL k testování hodnot null explicitně.
-- Only include people who have a nickname
MATCH (p:Person)
FILTER p.nickname IS NOT NULL
RETURN p.firstName, p.nickname
Slouží coalesce() k nahrazení výchozí hodnoty, pokud vlastnost může mít hodnotu null:
MATCH (p:Person)
RETURN p.firstName, coalesce(p.nickname, p.firstName) AS displayName
Caution
NULL = NULL vyhodnocuje jako UNKNOWN, ne TRUE. Vždy se používá IS NULL k testování hodnot null, nikoli rovnosti.
Agregace výsledků s RETURN
Pomocí agregačních funkcí RETURN můžete shrnout výsledky. GQL podporuje count(), , sum()avg(), min(), a max().
Pokud chcete například spočítat všechny lidi v grafu:
MATCH (p:Person)
RETURN count(*) AS totalPeople
Počet jedinečných hodnot, jako je počet společností, které zaměstnávají lidi:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN count(DISTINCT c) AS companyCount
Seskupení výsledků pomocí funkce GROUP BY
Použijte GROUP BY v RETURN ke seskupení řádků podle sdílených hodnot a výpočtu agregátů v rámci každé skupiny. Toto seskupení je ekvivalentem GQL v SQL GROUP BY.
Pokud chcete například spočítat zaměstnance na společnost:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC
Seskupte podle několika sloupců a vypočítáte několik agregací najednou. Můžete například rozdělit počet osob a rozsah narozenin podle pohlaví a prohlížeče a vrátit 10 nejběžnějších kombinací:
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
Všechny neagregační výrazy v RETURN musí být uvedeny v GROUP BY. Výrazy, které nejsou ve GROUP BY výrazech, musí používat agregační funkci.
Seřazení a omezení agregovaných výsledků
Použijte ORDER BY a LIMIT společně s GROUP BY k nalezení nejvýše N výsledků.
Pokud například chcete najít prvních pět měst podle počtu obyvatel:
MATCH (p:Person)-[:isLocatedIn]->(city:City)
LET cityName = city.name
RETURN cityName, count(*) AS residentCount
GROUP BY cityName
ORDER BY residentCount DESC
LIMIT 5
Důležité
Místo ORDER BY před LIMIT.
LIMIT vždy platí pro již seřazenou sadu výsledků.
Použijte PŘÍPAD pro podmíněné hodnoty v výsledcích
Slouží CASE/WHEN/THEN/ELSE k výpočtu podmíněných hodnot v RETURN nebo LET.
Pokud chcete například zařadit lidi do kategorií na základě jejich roku narození:
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