Grupați după (transact-sql)

Clauza GROUP BY are două sintaxe: ISO compatibilă și incompatibilă cu ISO. În fiecare instrucțiune separată SELECT, se poate utiliza numai un singur stil de sintaxă. În toate dezvoltările noi utilizați sintaxa compatibilă ISO. Sintaxa, incompatibilă cu ISO, servește la asigurarea compatibilității înapoi.







În această secțiune, clauza GROUP BY poate fi descrisă ca fiind generală sau simplă.

Clauza generală GROUP BY include grupurile SETUP GROUPING, CUBE, ROLLUP, WITH CUBE și WITH ROLLUP.

GROUP BY propoziție simplă nu include construcția, GROUPING SETURI CUBE, ROLLUP CU CUBE și cu ROLLUP. Suma licitată GROUP BY (), pentru determinarea total general este considerată ca o simplă propoziție GROUP BY.

Pentru fiecare combinație unică de valori (a, b, c) se formează o linie. (a, b). (a, c). (b, c). (A). (b) și (c) cu subtotal pentru fiecare linie și linia totală.

Producția CUBE este independentă de ordinea coloanelor.

Indică mai multe grupări de date într-o singură interogare. Procesarea statistică a numai grupurile specificate este efectuată și nu un set complet de date statistice generate utilizând construcțiile CUBE sau ROLLUP. Rezultatele sunt echivalente prin faptul că ele sunt formate utilizând construcția UNION ALL pentru grupurile specificate. Structura SETUP GROUPING poate conține un singur element sau o listă de elemente. În seturile de grupare, se pot specifica grupări echivalente cu cele returnate de construcția ROLLUP sau CUBE. Pentru exemplificare, consultați seturile de echivalente GROUPING SETS. <Список элементов группирующего набора> poate conține o construcție ROLLUP sau CUBE.

Un grup gol formează rezultatul.

Sintaxa nu este compatibilă cu ISO

Într-o versiune viitoare a Microsoft SQL Server, această caracteristică va fi eliminată. Evitați utilizarea acestei caracteristici în noile dezvoltări și planificați modificarea aplicațiilor existente în care este aplicată. Include toate grupurile și seturile de rezultate (chiar și cele care nu au șiruri de caractere) care satisfac cerința de căutare specificată în clauza WHERE. Dacă este specificat argumentul ALL, valorile NULL sunt returnate pentru coloanele grupului agregat care nu corespund condiției de căutare. Argumentul ALL nu poate fi specificat cu instrucțiunile CUBE sau ROLLUP.

Clauza GROUP BY ALL nu este acceptată în interogări cu acces la tabele la distanță dacă clauza WHERE este de asemenea prezentă în interogare. Aplicarea clauzei GROUP BY ALL la coloanele care au atributul FILESTREAM va duce la o eroare.

Expression. pe care se efectuează gruparea. Argumentul group_by_expression este numit și coloana de grupare. Argumentul de expresie group_by poate fi o coloană sau o expresie non-statistică care se referă la coloana returnată de clauza FROM. Aliasul de coloane definit în lista SELECT nu poate fi utilizat când se specifică o coloană de grupare.

Coloane de text. ntext și imagine nu pot fi utilizate în argumentul group_by_expression.

Pentru propuneri GROUP BY, care nu conțin operatori CUBE sau ROLLUP, numărul de elemente de coloane group_by_expression dimensiuni limitate GROUP BY, valori prelucrate statistic și coloanele statistice incluse în interogare. Acest lucru se explică prin limitarea dimensiunii tabelului de lucru intermediar (8.060 octeți) necesar pentru stocarea rezultatelor interogării intermediare. Când se specifică CUBE sau ROLLUP, numărul maxim de expresii de grup permis este de 12.

Metodele pentru tipul de date xml nu pot fi specificate direct în argumentul group_by_expression. În schimb, creați o referință la o funcție definită de utilizator care include metode pentru tipul de date xml sau trimite o coloană calculată care utilizează aceste metode.

Într-o versiune viitoare a Microsoft SQL Server, această caracteristică va fi eliminată. Evitați utilizarea acestei caracteristici în noile dezvoltări și planificați modificarea aplicațiilor existente în care este aplicată. Indică faptul că, în plus față de rândurile furnizate de GROUP BY, rândurile rezumate sunt incluse în setul de rezultate. Șirul rezumat GROUP BY este returnat pentru toate combinațiile posibile de grupuri și subgrupe din setul de rezultate. Pentru a determina dacă valorile NULL din setul de rezultate reprezintă valorile agregate GROUP BY, utilizați funcția GROUPING.







Numărul de rânduri rezumate din setul de rezultate este determinat de numărul de coloane incluse în clauza GROUP BY. Deoarece declarația CUBE returnează toate combinațiile posibile de grupuri și subgrupe, numărul de rânduri rămâne același, indiferent de ordinea dată de grupare a coloanelor.

Într-o versiune viitoare a Microsoft SQL Server, această caracteristică va fi eliminată. Evitați utilizarea acestei caracteristici în noile dezvoltări și planificați modificarea aplicațiilor existente în care este aplicată. Indică faptul că, în plus față de rândurile furnizate de GROUP BY, rândurile rezumate sunt incluse în setul de rezultate. Grupurile sunt rezumate într-o ordine ierarhică, începând cu cel mai scăzut nivel din grup și terminând cu cel mai înalt nivel. Ierarhia grupului este determinată de ordinea în care sunt grupate coloanele. Schimbarea ordinii coloanelor care vor fi grupate poate afecta numărul de rânduri din setul de rezultate.

Calculele statistice cheie DISTINCT, de exemplu AVG (column_name DISTINCT), COUNT (column_name DISTINCT) și USM (column_name DISTINCT), folosind CUBE și ROLLUP nu este suportat. Dacă sunt utilizate, componenta SQL Server Database Engine returnează un mesaj de eroare și anulează solicitarea.

Dacă în clauza SELECT <список выбора> sunt incluse funcțiile agregate, instrucțiunea GROUP BY calculează valorile agregate pentru fiecare grup. (Sunt cunoscute ca expresii statistice vectoriale.)

Șirurile care nu se potrivesc cu condițiile din clauza WHERE sunt îndepărtate înainte de efectuarea oricărei operațiuni în șarje.

Clauza HAVING este folosită cu clauza GROUP BY pentru a filtra grupurile din setul de rezultate.

Aplicarea unei clauze GROUP BY nu comandă setul de rezultate. Pentru a comanda setul de rezultate, trebuie să utilizați clauza ORDER BY.

Dacă coloana de grupare conține valori NULL, acestea sunt tratate ca fiind egale și plasate în același grup.

Nu puteți utiliza o clauză GROUP BY cu un alias pentru a înlocui numele coloanei într-o clauză AS dacă aliasul nu înlocuiește numele coloanei din vizualizare în clauza FROM.

Seturile grupate repetate în lista SETUP GROUPING nu sunt eliminate. Duplicate seturi de grupare poate fi format atunci când o expresie coloană este specificată mai mult decât o dată, sau în cazul în care sunt incluse în lista expresia coloanei formate ca CUB de proiectare sau ROLLUP în Grouping lista SETURI.

Cu constructe ROLLUP Cube și GRUPAREA SETURI funcții statistice suportate de cuvinte cheie DISTINCT, de exemplu AVG (column_name DISTINCT), COUNT (column_name DISTINCT) și USM (column_name DISTINCT).

Construcțiile ROLLUP, CUBE și GROUPING SETS nu pot fi specificate în vizualizarea indexată.

Instrucțiunile GROUP BY sau HAVING nu pot fi utilizate direct pentru coloanele de tip ntext. text sau imagine. Aceste coloane pot fi utilizate ca argumente în funcțiile care returnează valoarea altui tip de date, cum ar fi SUBSTRING () și CAST ().

Metodele de date de tipul xml nu pot fi specificate direct în argument . În schimb, creați o referință la o funcție definită de utilizator care include metode pentru tipul de date xml sau trimite o coloană calculată care utilizează aceste metode.

Limitările clauzei GROUP BY pentru construcțiile GROUPING SETS, ROLLUP și CUBE

Sintaxa Constrângeri

Nu puteți utiliza setările GROUPING în clauza GROUP BY dacă acestea nu fac parte din lista SETUP GROUPING. De exemplu, formularul GROUP BY C1, (C2.Cn) nu este valabil, dar se permite formularul GROUP BY GROUPING SET (C1, (C2 .Cn)).

Nu puteți utiliza cuvintele cheie GROUPING SETS în elementele constructive GROUPING SETS. De exemplu, expresia GROUP BY GROUPING SETS (C1, Seturi de grupare (C2, C3)) este nevalidă.

În clauza GROUP BY cu cuvintele cheie ROLLUP, CUBE sau GROUPING SETS, nu puteți utiliza cuvinte cheie ALL, WITH CUBE și WITH ROLLUP care sunt incompatibile cu ISO.

Restricții de dimensiune

Pentru clauzele simple GROUP BY, numărul de expresii este nelimitat.

Pentru sugestii GROUP BY, în care cuvintele cheie sunt folosite ROLLUP, CUBE, sau SETURI grouping, numărul maxim de expresii este de 32, iar numărul maxim de seturi de grupare care pot fi create este egal cu 4096 (2 12). Următoarele exemple nu reușesc deoarece clauza GROUP BY este prea complexă.

În următoarele exemple sunt generate 8192 (2 13) seturi de grupare.

Utilizarea seturilor de grupare în clauza GROUP BY este nevalidă dacă acestea nu fac parte din lista explicită GROUPING SETS. De exemplu, în acest standard este permisă clauza GROUP BY Column1, (Column2, ColumnN), dar nu în SQL Server. Puteți utiliza clauza GROUP BY, Setări de grupare ((Coloana 2, ColoanaN) sau GROUP BY Column1, Column2. ColumnN. Aceste instrucțiuni sunt echivalente semantic cu exemplul anterior al clauzei GROUP BY. Acest lucru evită posibilitatea unei interpretări incorecte a clauzei GROUP BY Column1 (Column2 ColumnN) ca GROUP BY C1, GROUPING SETS ((Coloana 2, ColoanaN)). Această instrucțiune nu este echivalentă din punct de vedere semantic.

Nu puteți utiliza GROUP BY cuvinte cheie [ALL / DISTINCT], în general, clauza GROUP BY, precum și în construcția de seturi, Grupare de ROLLUP, CUBE, CU CUBE sau CU ROLLUP. Cuvântul ALL este utilizat în mod implicit și este implicit setat.

Comparați funcțiile acceptate ale clauzei GROUP BY

Următorul tabel descrie funcțiile acceptate ale clauzei GROUP BY, luând în considerare versiunea SQL Server și nivelul de compatibilitate al bazei de date.







Articole similare

Trimiteți-le prietenilor: