Home » Articole » Articole » Calculatoare » Programare » SQL » SQL – SELECT: GROUP BY – Inspectarea grupurilor

SQL – SELECT: GROUP BY – Inspectarea grupurilor

postat în: SQL 0

După ce am definit grupuri cu cuvântul cheie GROUP BY, putem selecta mai multe informații despre fiecare dintre ele, de exemplu: câte persoane (rânduri) există în cadrul fiecărei familii (grup de rânduri)?


SELECT lastname, count(*)  -- count() este o funcție care numără valori sau rânduri
FROM   person
GROUP BY lastname;

Vedem că în micul nostru exemplu de bază de date există o familie cu trei membri, alta cu doi membri și toate celelalte sunt formate din exact 1 membru.

Ce se întâmplă în spatele scenei în timpul executării comenzii?

  1. Sunt preluate toate cele zece rânduri ale persoanei din tabel (în comanda de mai sus, nu există o clauză WHERE).
  2. Rândurile sunt aranjate în șapte grupuri în funcție de valoarea coloanei numele de familie.
  3. Fiecare grup cu toate rândurile sale este trecut la clauza SELECT.
  4. SELECT construiește un rând rezultat pentru fiecare grup primit (în bazele de date din „lumea reală”, fiecare dintre grupuri poate conține mii de rânduri).

În pasul 4 este generat exact un rând rezultat per grup. Deoarece SELECT creează un singur rând rezultat per grup, nu este posibil să se afișeze valori ale unor astfel de coloane care pot diferi de la rând la rând, de exemplu, prenumele. SELECT poate afișa numai acele valori pentru care este asigurat că sunt identice în toate rândurile grupului: coloana „criterion”.


-- Nu este posibil să afișați „firstname” unui grup! „firstname” este un atribut al unei singure persoane.
-- În cadrul unui grup, „firstname” variază de la rând la rând.
-- SGBD-ul ar trebui să recunoască această problemă și ar trebui să emită un mesaj de eroare.
SELECT lastname, firstname
FROM   person
GROUP BY lastname;
-- Un indiciu pentru utilizatorii MySQL:
-- Pentru a primi rezultate corecte (mesajul de eroare) trebuie să dezactivați o funcție specială de performanță lansând comanda
-- set sql_mode = 'ONLY_FULL_GROUP_BY'; sau setați-o în bancul de lucru sau în fișierul ini.

Cu toate acestea, putem obține informații despre coloanele non-criterion. Dar aceste informații sunt mai generalizate. SGBD oferă un grup special de funcții care construiesc o valoare dintr-un set de rânduri. Luați în considerare funcția avg(), care calculează media aritmetică a valorilor numerice. Această funcție primește un nume de coloană și operează pe un set de rânduri. Dacă comanda noastră în cauză conține o clauză GROUP BY, funcția avg() calculează o valoare per grup – nu o valoare pe toate rândurile, ca de obicei. Deci este posibil să se arate rezultatul unor astfel de funcții împreună cu valorile coloanei „criterion”.

Iată o listă – incompletă – de astfel de funcții: count(), max(), min(), sum(), avg(). Nu toate funcțiile sunt de acest fel, de ex. funcția concat(), care concatenează două șiruri de caractere, operează pe rânduri individuale și creează o valoare pe rând.


-- compute avg() by your own formula
SELECT lastname, sum(weight) / count(weight) as "Mean weight 1", avg(weight) as "Mean weight 2"
FROM   person
GROUP BY lastname;

(Include texte din Wikibooks traduse și adaptate de Nicolae Sfetcu)

Analitica rețelelor sociale
Analitica rețelelor sociale

Descoperă puterea datelor și transformă modul în care înțelegi și utilizezi rețelele sociale.

Nu a fost votat $3.99$9.61 Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Rețele de comunicații 5G
Rețele de comunicații 5G

Descoperă cum 5G transformă lumea și pregătește-te să fii parte din viitor.

Nu a fost votat $2.99$6.88 Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.
Business intelligence și analitica în afaceri
Business intelligence și analitica în afaceri

Esențială pentru profesioniștii și studenții pasionați de transformarea datelor brute în informații valoroase.

Nu a fost votat $4.99$10.99 Selectează opțiunile Acest produs are mai multe variații. Opțiunile pot fi alese în pagina produsului.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *