Skip to content

SQL összesítő függvények elmagyarázva

SQL összesítő függvények, a GROUP BY, a HAVING, valamint a distinct és haladó aggregátumok visszatérési értékekhez és egy orders táblán készült egysoros példákhoz kötve.

Az összesítő függvények sok sort egyetlen skalár eredménnyé fűznek össze. A GROUP BY a sorokat kulcs szerint particionálja az aggregálás előtt. A HAVING a csoportokat szűri az aggregálás után. A NULL bemeneteket minden aggregátum kihagyja, kivéve a COUNT(*).

Referenciatáblázat · 29 bejegyzés
29 of 29 rows
Skalár
A nem NULL bemeneti értékek száma; a COUNT(*) minden sort megszámol.SELECT COUNT(*) FROM orders
A nem NULL numerikus értékek összege. Üres halmazon NULL-t ad vissza.SELECT SUM(total) FROM orders
A nem NULL numerikus értékek számtani közepe. A NULL bemeneteket figyelmen kívül hagyja.SELECT AVG(total) FROM orders
A legkisebb nem NULL érték bármilyen összehasonlítható típuson.SELECT MIN(total) FROM orders
A legnagyobb nem NULL érték bármilyen összehasonlítható típuson.SELECT MAX(total) FROM orders
Csoportosított
A bemeneti sorokat kulcs szerint particionálja; az aggregátumok partíciónként futnak.SELECT user_id, SUM(total) FROM orders GROUP BY user_id
Csoportonként kiértékelt predikátum az aggregálás után. Az aggregátumoknál a WHERE helyettesítője.SELECT user_id, COUNT(*) FROM orders GROUP BY user_id HAVING COUNT(*) > 5
Több aggregátum számítódik csoportonként egy menetben.SELECT user_id, COUNT(*), SUM(total), AVG(total) FROM orders GROUP BY user_id
Több csoportosítást számol egy utasításban; az aktuális halmazon kívüli kulcsok NULL-t adnak.SELECT user_id, region, SUM(total) FROM orders GROUP BY GROUPING SETS ((user_id), (region), ())
Rövidítés a hierarchián alapuló grouping setekhez; részösszegeket és végösszeget ad.SELECT region, user_id, SUM(total) FROM orders GROUP BY ROLLUP (region, user_id)
Rövidítés a felsorolt kulcsok minden kombinációjára grouping setekként.SELECT region, user_id, SUM(total) FROM orders GROUP BY CUBE (region, user_id)
Sima csoportkulcsot kever grouping setekkel egyetlen klózban.SELECT user_id, region, SUM(total) FROM orders GROUP BY user_id, GROUPING SETS ((region), ())
Kulcsonként a rendezés szerinti első sort tartja meg. Postgres-bővítmény.SELECT DISTINCT ON (user_id) user_id, total FROM orders ORDER BY user_id, created_at DESC
Distinct és haladó
Az egyedi nem NULL értékek száma. Előbb deduplikál.SELECT COUNT(DISTINCT user_id) FROM orders
A distinct értékek számát becsüli korlátos hibával; nagy bemenetekhez készült.SELECT APPROX_COUNT_DISTINCT(user_id) FROM orders
A nem NULL szövegeket fűzi össze elválasztóval.SELECT STRING_AGG(user_id::text, ',') FROM orders
A nem NULL szövegeket fűzi össze; a STRING_AGG MySQL-neve.SELECT GROUP_CONCAT(user_id SEPARATOR ',') FROM orders
A nem NULL bemeneti értékeket tömbbe gyűjti.SELECT ARRAY_AGG(total) FROM orders
A bemeneti sorokat JSON-tömbbe gyűjti; a JSONB változat elemezett binárist tárol.SELECT JSONB_AGG(user_id) FROM orders
TRUE, ha minden / bármely nem NULL bemeneti érték igaz.SELECT BOOL_AND(total > 0), BOOL_OR(total > 100) FROM orders
Szabványos álnév a BOOL_AND helyett.SELECT EVERY(total > 0) FROM orders
Interpolált / legközelebbi rangú percentilis a rendezett bemeneten; WITHIN GROUP kell hozzá.SELECT PERCENTILE_CONT(0.5) WITHIN GROUP (ORDER BY total) FROM orders
A leggyakoribb bemeneti érték; rendezett-halmaz aggregátum a Postgresben.SELECT MODE() WITHIN GROUP (ORDER BY total) FROM orders
A rendezési sorrendet adja át a rendezett-halmaz és a hipotetikus-halmaz aggregátumoknak.SELECT RANK(500) WITHIN GROUP (ORDER BY total) FROM orders
Az aggregátumot a feltételt teljesítő sorokra korlátozza.SELECT COUNT(*) FILTER (WHERE total > 100) FROM orders
Rendezi az értékeket, mielőtt az aggregátum összefűzné vagy összegyűjtené őket.SELECT STRING_AGG(user_id::text, ',' ORDER BY user_id) FROM orders
A COUNT(*) és a COUNT(1) minden sort számol; a COUNT(col) kihagyja a NULL bemeneteket.SELECT COUNT(*), COUNT(total), COUNT(1) FROM orders
A nem NULL numerikus értékek mintaszórása. A STDDEV_POP adja a populációs alakot; a csupasz név alapértelmezése motoronként eltér.SELECT STDDEV(total) FROM orders
A nem NULL numerikus értékek mintaszórásnégyzete (a STDDEV négyzete). A VAR_SAMP és a VAR_POP nevezi meg mindkét alakot.SELECT VARIANCE(total) FROM orders