Σημείωμα
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να εισέλθετε ή να αλλάξετε καταλόγους.
Η πρόσβαση σε αυτήν τη σελίδα απαιτεί εξουσιοδότηση. Μπορείτε να δοκιμάσετε να αλλάξετε καταλόγους.
Το φιλτράρισμα περιορίζει τα αποτελέσματά σας στις γραμμές που έχουν σημασία. Η συνάθροιση συνοψίζει αυτές τις γραμμές σε μετρήσεις, σύνολα και μέσους όρους. Αυτό το άρθρο σάς δείχνει πώς μπορείτε να εφαρμόσετε και τις δύο τεχνικές σε ερωτήματα GQL έναντι γραφήματος στο Microsoft Fabric.
Τα παραδείγματα χρησιμοποιούν το δείγμα συνόλου δεδομένων κοινωνικού δικτύου. Για μια πλήρη αναφορά των δηλώσεων και εκφράσεων GQL, ανατρέξτε στον οδηγό γλώσσας GQL.
Prerequisites
- Ένα στοιχείο γραφήματος με φορτωμένα δεδομένα. Εάν είστε νέοι στο γράφημα, ολοκληρώστε πρώτα το σεμινάριο .
- Εξοικείωση με βασικά
MATCHκαιRETURNερωτήματα. Δείτε τον οδηγό γλώσσας GQL.
Φιλτράρισμα σειρών με FILTER
Χρησιμοποιήστε το FILTER για να διατηρήσετε μόνο τις γραμμές που ικανοποιούν μια συνθήκη. Τοποθετήστε FILTER μετά MATCH για να περιορίσετε τα αποτελέσματα που ταιριάζουν.
Το παρακάτω ερώτημα επιστρέφει όλες τις γυναίκες με το όνομα και τα γενέθλιά τους:
MATCH (p:Person)
FILTER p.gender = 'female'
RETURN p.firstName, p.lastName, p.birthday
Συνδυάστε πολλές συνθήκες με AND και OR. Για παράδειγμα, το παρακάτω ερώτημα επιστρέφει τα ονόματα όλων των θηλυκών που γεννήθηκαν πριν από το 1990:
MATCH (p:Person)
FILTER p.gender = 'female' AND p.birthday < 19900101
RETURN p.firstName, p.lastName
Συμβουλή
Για καλύτερες επιδόσεις, φιλτράρετε κατά την αντιστοίχιση μοτίβων με έναν ενσωματωμένο WHERE όρο και όχι με ξεχωριστή FILTER πρόταση.
Δείτε την ενότητα Φιλτράρισμα κατά την αντιστοίχιση μοτίβων.
Φιλτράρισμα κατά την αντιστοίχιση μοτίβων
Οι ενσωματωμένοι WHERE όροι μέσα σε ένα MATCH μοτίβο περιορίζουν τους κόμβους και τις ακμές που ταιριάζουν πριν από την παραγωγή οποιωνδήποτε αποτελεσμάτων. Αυτή η προσέγγιση είναι πιο αποτελεσματική από μια ρήτρα μετά την αντιστοίχιση FILTER , επειδή η μηχανή ερωτημάτων κλαδεύει τις σειρές νωρίτερα.
Για παράδειγμα, για να βρείτε άτομα που γεννήθηκαν πριν από το 1994 μαζί με την εταιρεία στην οποία εργάζονται, περιορίζοντας τα αποτελέσματα σε εταιρείες των οποίων το όνομα αρχίζει με «Α»:
MATCH (p:Person WHERE p.birthday < 19940101)-[:workAt]->(c:Company WHERE c.name STARTS WITH 'A')
RETURN p.firstName, p.lastName, c.name
Φιλτράρετε τις ιδιότητες των άκρων με τον ίδιο τρόπο. Για παράδειγμα, για να επιστρέψετε μόνο άτομα που άρχισαν να εργάζονται σε μια εταιρεία το 2000 ή αργότερα:
MATCH (p:Person)-[w:workAt WHERE w.workFrom >= 2000]->(c:Company)
RETURN p.firstName, p.lastName, c.name, w.workFrom
Για περισσότερες πληροφορίες σχετικά με τη διαφορά επιδόσεων μεταξύ του ενσωματωμένου φιλτραρίσματος και του φιλτραρίσματος μετά την αντιστοίχιση, ανατρέξτε στο θέμα Βελτιστοποίηση επιδόσεων ερωτημάτων GQL.
Χειρισμός τιμών null σε φίλτρα
Η GQL χρησιμοποιεί λογική τριών τιμών: τα κατηγορήματα αξιολογούνται σε TRUE, FALSE, ή UNKNOWN. Όταν μια τιμή ιδιότητας είναι μηδενική, οι συγκρίσεις επιστρέφουν UNKNOWN.
FILTER αντιμετωπίζει UNKNOWN ως μη ταιριαστή, επομένως η σειρά εξαιρείται.
Χρησιμοποιήστε IS NULL και IS NOT NULL για να ελέγξετε ρητά για μηδενικές τιμές:
-- Only include people who have a nickname
MATCH (p:Person)
FILTER p.nickname IS NOT NULL
RETURN p.firstName, p.nickname
Χρησιμοποιήστε το coalesce() για να αντικαταστήσετε μια προεπιλεγμένη τιμή όταν μια ιδιότητα μπορεί να είναι null:
MATCH (p:Person)
RETURN p.firstName, coalesce(p.nickname, p.firstName) AS displayName
Προσοχή
NULL = NULL αξιολογεί σε UNKNOWN, όχι TRUE. Χρησιμοποιείται IS NULL πάντα για τον έλεγχο μηδενικών τιμών, όχι ισότητας.
Συγκεντρωτικά αποτελέσματα με RETURN
Χρησιμοποιήστε συναρτήσεις συγκεντρωτικών αποτελεσμάτων στο RETURN για να συνοψίσετε τα αποτελέσματά σας. Το GQL υποστηρίζει count(), sum(), avg(), min(), και max().
Για παράδειγμα, για να μετρήσετε όλα τα άτομα στο γράφημα:
MATCH (p:Person)
RETURN count(*) AS totalPeople
Για να μετρήσετε διακριτές αξίες, όπως πόσες διαφορετικές εταιρείες απασχολούν άτομα:
MATCH (p:Person)-[:workAt]->(c:Company)
RETURN count(DISTINCT c) AS companyCount
Ομαδικά αποτελέσματα με GROUP BY
Χρησιμοποιήστε το GROUP BY για RETURN να ομαδοποιήσετε γραμμές κατά κοινόχρηστες τιμές και να υπολογίσετε συγκεντρωτικές τιμές σε κάθε ομάδα. Αυτή η ομαδοποίηση είναι το ισοδύναμο GQL της SQL GROUP BY.
Για παράδειγμα, για να μετρήσετε τους υπαλλήλους ανά εταιρεία:
MATCH (p:Person)-[:workAt]->(c:Company)
LET companyName = c.name
RETURN companyName, count(*) AS employeeCount
GROUP BY companyName
ORDER BY employeeCount DESC
Ομαδοποιήστε κατά πολλές στήλες και υπολογίστε πολλές συγκεντρωτικές τιμές ταυτόχρονα. Για παράδειγμα, αναλύστε τον αριθμό των ατόμων και το εύρος γενεθλίων ανά φύλο και πρόγραμμα περιήγησης, επιστρέφοντας τους 10 πιο συνηθισμένους συνδυασμούς:
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
Σημείωμα
Όλες οι μη συγκεντρωτικές εκφράσεις στο RETURN πρέπει να εμφανίζονται στο GROUP BY. Οι παραστάσεις που δεν περιλαμβάνονται πρέπει GROUP BY να χρησιμοποιούν μια συνάρτηση συγκεντρωτικών αποτελεσμάτων.
Ταξινόμηση και περιορισμός συγκεντρωτικών αποτελεσμάτων
Χρησιμοποιήστε και ORDER BYLIMIT μαζί με GROUP BY για να βρείτε κορυφαία αποτελέσματα.
Για παράδειγμα, για να βρείτε τις πέντε κορυφαίες πόλεις ανά αριθμό κατοίκων:
MATCH (p:Person)-[:isLocatedIn]->(city:City)
LET cityName = city.name
RETURN cityName, count(*) AS residentCount
GROUP BY cityName
ORDER BY residentCount DESC
LIMIT 5
Σημαντικό
Τοποθετήστε ORDER BY πριν .LIMIT
LIMIT ισχύει πάντα για το ήδη ταξινομημένο σύνολο αποτελεσμάτων.
Χρήση της συνάρτησης CASE για τιμές υπό όρους στα αποτελέσματα
Χρησιμοποιείται CASE/WHEN/THEN/ELSEγια τον υπολογισμό τιμών υπό συνθήκη στο ή .RETURNLET
Για παράδειγμα, για να κατηγοριοποιήσετε τους ανθρώπους σε εποχές με βάση το έτος γέννησής τους:
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