Skip to content

Συναρτήσεις συγκέντρωσης SQL εξηγούνται

Συναρτήσεις συγκέντρωσης SQL, GROUP BY, HAVING και distinct/προχωρημένα συγκεντρωτικά, αντιστοιχισμένες σε τιμές επιστροφής και παραδείγματα μίας γραμμής σε πίνακα παραγγελιών.

Οι συναρτήσεις συγκέντρωσης συντρίβουν πολλές γραμμές σε ένα βαθμωτό αποτέλεσμα. Το GROUP BY διαιρεί τις γραμμές ανά κλειδί πριν τη συγκέντρωση. Το HAVING φιλτράρει ομάδες μετά τη συγκέντρωση. Οι τιμές NULL παραλείπονται από κάθε συγκεντρωτική εκτός από την COUNT(*).

Πίνακας αναφοράς · 29 καταχωρήσεις
29 of 29 rows
Βαθμωτές
Πλήθος τιμών εισόδου που δεν είναι NULL· η COUNT(*) μετρά όλες τις γραμμές.SELECT COUNT(*) FROM orders
Άθροισμα αριθμητικών τιμών που δεν είναι NULL. Επιστρέφει NULL σε κενό σύνολο.SELECT SUM(total) FROM orders
Αριθμητικός μέσος όρος αριθμητικών τιμών που δεν είναι NULL. Οι τιμές NULL αγνοούνται.SELECT AVG(total) FROM orders
Η μικρότερη τιμή που δεν είναι NULL, για κάθε συγκρίσιμο τύπο.SELECT MIN(total) FROM orders
Η μεγαλύτερη τιμή που δεν είναι NULL, για κάθε συγκρίσιμο τύπο.SELECT MAX(total) FROM orders
Ομαδοποιημένες
Διαιρεί τις γραμμές εισόδου ανά κλειδί· τα συγκεντρωτικά εκτελούνται ανά διαμέρισμα.SELECT user_id, SUM(total) FROM orders GROUP BY user_id
Πρόβλεψη που αποτιμάται ανά ομάδα μετά τη συγκέντρωση. Αντικαθιστά το WHERE για συγκεντρωτικά.SELECT user_id, COUNT(*) FROM orders GROUP BY user_id HAVING COUNT(*) > 5
Πολλαπλά συγκεντρωτικά ανά ομάδα σε ένα πέρασμα.SELECT user_id, COUNT(*), SUM(total), AVG(total) FROM orders GROUP BY user_id
Υπολογίζει πολλαπλές ομαδοποιήσεις σε μία εντολή· τα κλειδιά εκτός του τρέχοντος συνόλου επιστρέφουν NULL.SELECT user_id, region, SUM(total) FROM orders GROUP BY GROUPING SETS ((user_id), (region), ())
Συντομογραφία για ιεραρχικά grouping sets· προσθέτει μερικά σύνολα και γενικό σύνολο.SELECT region, user_id, SUM(total) FROM orders GROUP BY ROLLUP (region, user_id)
Συντομογραφία για κάθε συνδυασμό των κλειδιών ως grouping sets.SELECT region, user_id, SUM(total) FROM orders GROUP BY CUBE (region, user_id)
Συνδυάζει απλά κλειδιά ομαδοποίησης με grouping sets σε μία ρήτρα.SELECT user_id, region, SUM(total) FROM orders GROUP BY user_id, GROUPING SETS ((region), ())
Κρατά την πρώτη γραμμή ανά κλειδί με τη σειρά ταξινόμησης. Επέκταση της Postgres.SELECT DISTINCT ON (user_id) user_id, total FROM orders ORDER BY user_id, created_at DESC
Distinct και προχωρημένες
Πλήθος μοναδικών τιμών που δεν είναι NULL. Αφαιρεί πρώτα τα διπλότυπα.SELECT COUNT(DISTINCT user_id) FROM orders
Εκτιμά το πλήθος των διακριτών τιμών με περιορισμένο σφάλμα· φτιαγμένη για μεγάλες εισόδους.SELECT APPROX_COUNT_DISTINCT(user_id) FROM orders
Συνενώνει συμβολοσειρές που δεν είναι NULL με διαχωριστικό.SELECT STRING_AGG(user_id::text, ',') FROM orders
Συνενώνει συμβολοσειρές που δεν είναι NULL· το όνομα της STRING_AGG στην MySQL.SELECT GROUP_CONCAT(user_id SEPARATOR ',') FROM orders
Συλλέγει τιμές εισόδου που δεν είναι NULL σε πίνακα (array).SELECT ARRAY_AGG(total) FROM orders
Συλλέγει τις γραμμές εισόδου σε πίνακα JSON· η μορφή JSONB αποθηκεύει αναλυμένο δυαδικό.SELECT JSONB_AGG(user_id) FROM orders
TRUE όταν κάθε / οποιαδήποτε τιμή εισόδου που δεν είναι NULL είναι αληθής.SELECT BOOL_AND(total > 0), BOOL_OR(total > 100) FROM orders
Πρότυπο ψευδώνυμο της BOOL_AND.SELECT EVERY(total > 0) FROM orders
Περσεντίλη με παρεμβολή / κοντινότερης κατάταξης πάνω στην ταξινομημένη είσοδο· απαιτεί WITHIN GROUP.SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total) FROM orders
Η πιο συχνή τιμή εισόδου· ένα συγκεντρωτικό ταξινομημένου συνόλου στην Postgres.SELECT MODE() WITHIN GROUP (ORDER BY total) FROM orders
Περνά τη σειρά ταξινόμησης σε συγκεντρωτικά ταξινομημένου και υποθετικού συνόλου.SELECT RANK(500) WITHIN GROUP (ORDER BY total) FROM orders
Περιορίζει το συγκεντρωτικό στις γραμμές που πληρούν τη συνθήκη.SELECT COUNT(*) FILTER (WHERE total > 100) FROM orders
Ταξινομεί τις τιμές πριν τις συνενώσει ή συλλέξει το συγκεντρωτικό.SELECT STRING_AGG(user_id::text, ',' ORDER BY user_id) FROM orders
Η COUNT(*) και η COUNT(1) μετρούν κάθε γραμμή· η COUNT(col) παραλείπει τιμές NULL.SELECT COUNT(*), COUNT(total), COUNT(1) FROM orders
Τυπική απόκλιση δείγματος αριθμητικών τιμών που δεν είναι NULL. Η STDDEV_POP δίνει τη μορφή πληθυσμού· η προεπιλογή του γυμνού ονόματος διαφέρει ανά μηχανή.SELECT STDDEV(total) FROM orders
Διακύμανση δείγματος αριθμητικών τιμών που δεν είναι NULL (τετράγωνο της STDDEV). Οι VAR_SAMP και VAR_POP ονομάζουν κάθε μορφή.SELECT VARIANCE(total) FROM orders