Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Filtreleme sonuçlarınızı önemli olan satırlara daraltıyor. Toplama, bu satırları sayılar, toplamlar ve ortalamalar halinde özetler. Bu makalede, GQL sorgularındaki her iki tekniğin de Microsoft Fabric'daki graflara nasıl uygulanacağı gösterilmektedir.
Örneklerde sosyal ağ örnek veri kümesi kullanılır. GQL deyimlerinin ve ifadelerinin tam başvurusu için bkz. GQL dil kılavuzu.
Prerequisites
- Verilerin yüklendiği bir grafik öğesi. Grafı yeni kullanıyorsanız, önce öğreticiyi tamamlayın.
- Temel
MATCHveRETURNsorgular hakkında bilgi. Bkz. GQL dil kılavuzu.
FİlTRE ile satırları filtreleme
Yalnızca bir koşulu karşılayan satırları tutmak için kullanın FILTER . Eşleşen sonuçları daraltmak için FILTER ardından MATCH yerleştirin.
Aşağıdaki sorgu, tüm kadınların adını ve doğum gününü döndürür.
MATCH (p:Person)
FILTER p.gender = 'female'
RETURN p.firstName, p.lastName, p.birthday
Birden çok koşulu AND ve OR ile birleştirin. Örneğin, aşağıdaki sorgu 1990'da doğan tüm kadınların adlarını döndürür:
MATCH (p:Person)
FILTER p.gender = 'female' AND p.birthday < 19900101
RETURN p.firstName, p.lastName
Tavsiye
Daha iyi performans için, desen eşleştirme sırasında ayrı bir WHERE deyim yerine satır içi FILTER yan tümcesi ile filtreleyin. Bkz . Desen eşleştirme sırasında filtreleme.
Desen eşleştirme sırasında filtre uygulama
Bir desenin içindeki satır içi WHERE yan tümceleri, herhangi bir MATCH sonuç üretilmeden önce hangi düğümlerin ve kenarların eşleştirildiğini kısıtlar. Sorgu motoru satırları daha önce ayıkladığı için bu yaklaşım eşleşme FILTER sonrası yan tümcesinden daha verimlidir.
Örneğin, 1994 yılından önce doğan kişileri ve çalıştıkları şirketi bulmak için sonuçları adı 'A' ile başlayan şirketlerle sınırlandırın:
MATCH (p:Person WHERE p.birthday < 19940101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name
Kenar özelliklerini aynı şekilde filtreleyin. Örneğin, yalnızca 2000 veya sonraki bir tarihte bir şirkette çalışmaya başlayan kişileri döndürmek için:
MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2000]->(c:Company)
RETURN p.firstName, p.lastName, c.name, w.workFrom
Satır içi ve eşleşme sonrası filtreleme arasındaki performans farkı hakkında daha fazla bilgi için bkz. GQL sorgu performansını iyileştirme.
Filtrelerde null değerleri işleme
GQL üç değerli mantık kullanır: koşullar TRUE, FALSE veya UNKNOWN olarak değerlendirilir. Özellik değeri null olduğunda karşılaştırmalar döndürür UNKNOWN.
FILTER, UNKNOWN eşleşmiyormuş gibi davranır, bu nedenle satır dışlanır.
Null değerlerini açıkça test etmek için IS NULL ve IS NOT NULL kullanın:
-- Only include people who have a nickname
MATCH (p:Person)
FILTER p.nickname IS NOT NULL
RETURN p.firstName, p.nickname
Bir özellik null olabileceğinde varsayılan değeri değiştirmek için kullanın coalesce() :
MATCH (p:Person)
RETURN p.firstName, coalesce(p.nickname, p.firstName) AS displayName
Caution
NULL = NULL
UNKNOWN olarak değerlendirilir, TRUE değil. Her zaman eşitlik kontrolü yerine null değerlerini test etmek için IS NULL kullanın.
RETURN ile sonuçları toplama
Sonuçlarınızı özetlemek için içindeki RETURN toplama işlevlerini kullanın. GQL count(), sum(), avg(), min() ve max()'yi destekler.
Örneğin, grafikteki tüm kişileri saymak için:
MATCH (p:Person)
RETURN count(*) AS totalPeople
Kaç ayrı şirketin kişi çalıştırması gibi farklı değerleri saymak için:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN count(DISTINCT c) AS companyCount
GROUP BY ile sonuçları gruplandırma
Paylaşılan değerlere göre satırları gruplandırmak ve her grup içinde toplamları hesaplamak için GROUP BY içinde RETURN kullanın. Bu gruplandırma, SQL'in GROUP BYGQL eşdeğeridir.
Örneğin, şirket başına çalışanları saymak için:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC
Birden çok sütuna göre gruplandırma ve aynı anda birkaç toplama işlemi yapma. Örneğin, kişi sayısını ve doğum günü aralığını cinsiyete ve tarayıcıya göre ayırarak en yaygın 10 bileşimi döndürerek:
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
RETURN içindeki tüm toplama olmayan ifadeler, GROUP BY içinde görünmelidir. içinde GROUP BY olmayan ifadeler bir toplama işlevi kullanmalıdır.
Toplanan sonuçları sıralama ve sınırlama
top-N sonuçlarını bulmak için ORDER BY ve LIMIT'i birlikte GROUP BY ile kullanın.
Örneğin, yerleşik kişi sayısına göre ilk beş şehri bulmak için:
MATCH (p:Person)-[:isLocatedIn]->(city:City)
LET cityName = city.name
RETURN cityName, count(*) AS residentCount
GROUP BY cityName
ORDER BY residentCount DESC
LIMIT 5
Important
ORDER BY öğesini LIMIT önüne yerleştirin.
LIMIT her zaman zaten sıralanmış sonuç kümesi için geçerlidir.
Sonuçlardaki koşullu değerler için CASE kullanma
CASE
/
WHEN
/
THEN
/
ELSE kullanarak RETURN veya LET içinde koşullu değerleri hesaplayın.
Örneğin, insanları doğum yıllarına göre çağlara ayırmak için:
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